百思不得其解:CMR中兩個關聯的Entity Bean中在哪裡指定具體的關聯字段呢?
近日學習EJB中,看到CMP部分,實現關聯的時候,ejb-jar.xml如下(JBuilder生成):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd">
<ejb-jar>
<enterprise-beans>
<entity>
<display-name>Product</display-name>
<ejb-name>Product</ejb-name>
<local-home>crm.ProductHome</local-home>
<local>crm.Product</local>
<ejb-class>crm.ProductBean</ejb-class>
<persistence-type>Container</persistence-type>
<prim-key-class>crm.ProductPK</prim-key-class>
<reentrant>False</reentrant>
<cmp-version>2.x</cmp-version>
<abstract-schema-name>Product</abstract-schema-name>
<cmp-field>
<field-name>id</field-name>
</cmp-field>
<cmp-field>
<field-name>name</field-name>
</cmp-field>
<cmp-field>
<field-name>defaultPrice</field-name>
</cmp-field>
<cmp-field>
<field-name>description</field-name>
</cmp-field>
</entity>
<entity>
<display-name>Orders</display-name>
<ejb-name>Orders</ejb-name>
<local-home>crm.OrdersHome</local-home>
<local>crm.Orders</local>
<ejb-class>crm.OrdersBean</ejb-class>
<persistence-type>Container</persistence-type>
<prim-key-class>crm.OrdersPK</prim-key-class>
<reentrant>False</reentrant>
<cmp-version>2.x</cmp-version>
<abstract-schema-name>Orders</abstract-schema-name>
<cmp-field>
<field-name>id</field-name>
</cmp-field>
<cmp-field>
<field-name>code</field-name>
</cmp-field>
<cmp-field>
<field-name>date</field-name>
</cmp-field>
<cmp-field>
<field-name>description</field-name>
</cmp-field>
</entity>
<entity>
<display-name>OrderItem</display-name>
<ejb-name>OrderItem</ejb-name>
<local-home>crm.OrderItemHome</local-home>
<local>crm.OrderItem</local>
<ejb-class>crm.OrderItemBean</ejb-class>
<persistence-type>Container</persistence-type>
<prim-key-class>crm.OrderItemPK</prim-key-class>
<reentrant>False</reentrant>
<cmp-version>2.x</cmp-version>
<abstract-schema-name>OrderItem</abstract-schema-name>
<cmp-field>
<field-name>id</field-name>
</cmp-field>
<cmp-field>
<field-name>orderId</field-name>
</cmp-field>
<cmp-field>
<field-name>productId</field-name>
</cmp-field>
<cmp-field>
<field-name>quantity</field-name>
</cmp-field>
<cmp-field>
<field-name>price</field-name>
</cmp-field>
</entity>
</enterprise-beans>
<relationships>
<ejb-relation>
<ejb-relation-name>orders-orderItem</ejb-relation-name>
<ejb-relationship-role>
<description>orders</description>
<ejb-relationship-role-name>OrdersRelationshipRole</ejb-relationship-role-name>
<multiplicity>One</multiplicity>
<relationship-role-source>
<description>orders</description>
<ejb-name>Orders</ejb-name>
</relationship-role-source>
<cmr-field>
<description>orderItem</description>
<cmr-field-name>items</cmr-field-name>
<cmr-field-type>java.util.Collection</cmr-field-type>
</cmr-field>
</ejb-relationship-role>
<ejb-relationship-role>
<description>orderItem</description>
<ejb-relationship-role-name>OrderItemRelationshipRole</ejb-relationship-role-name>
<multiplicity>Many</multiplicity>
<cascade-delete />
<relationship-role-source>
<description>orderItem</description>
<ejb-name>OrderItem</ejb-name>
</relationship-role-source>
</ejb-relationship-role>
</ejb-relation>
</relationships>
<assembly-descriptor>
<container-transaction>
<method>
<ejb-name>Product</ejb-name>
<method-name>*</method-name>
</method>
<trans-attribute>Required</trans-attribute>
</container-transaction>
<container-transaction>
<method>
<ejb-name>Orders</ejb-name>
<method-name>*</method-name>
</method>
<trans-attribute>Required</trans-attribute>
</container-transaction>
<container-transaction>
<method>
<ejb-name>OrderItem</ejb-name>
<method-name>*</method-name>
</method>
<trans-attribute>Required</trans-attribute>
</container-transaction>
</assembly-descriptor>
</ejb-jar>
-----------
其中:
<cmr-field>
<description>orderItem</description>
<cmr-field-name>items</cmr-field-name>
<cmr-field-type>java.util.Collection</cmr-field-type>
</cmr-field>
我的認為是在Order EntityBean中通過items字段得到相關的orderItem的集合。
但是我的困惑是:
我的Order表中有一個id為主鍵
OrderItem中有一個id為主鍵,還有一個orderid的外鍵指向Order的id.
但是在哪兒指定OrderItem中的orderid與Order中的id之間的關系呢?ejb container在具體實現的時候怎麼才能明白它們的關系呢?
在ejb-jar.xml中可以看出來嗎?還是另有機關?
剛剛學習EJB,請指正!