我是一个总的新手,EJB技术,所以最近我开始学习EJB3.0,通过书籍阅读/网络资源时,我发现很多参考和比较,以EJB2.0和通过要求开发人员创建发烧EJB3.0如何简化事情组件。 我离开了我EJB3.0的阅读开始读EJB2.0。 我开始用书“企业Java Beans由Richard Monson的-Haefel的III版”,它很老版(2000年),但很全面。 我理解的东西相当不错,直到容器管理的关系。 我发现,通过抽象持久化模型(抽象的存取方法)和抽象模式(部署描述符),一个关系是两个实体bean之间建立。 此外,我发现,对于实体Bean的持久性领域,在部署是虚拟的持久字段和实际的数据库表列之间建立映射的时间。 当你建立这样的映射虚拟关系领域,它是只在部署时? 单向一对一
<ejb-jar>
<enterprise-beans>
<entity>
<ejb-name>CustomerEJB</ejb-name>
<home>com.titan.customer.CustomerHomeRemote</home>
<remote>com.titan.customer.CustomerRemote</remote>
<ejb-class>com.titan.customer.CustomerBean</ejb-class>
<persistence-type>Container</persistence-type>
<prim-key-class>java.lang.Integer</prim-key-class>
<reentrant>False</reentrant>
<cmp-version>2.x</cmp-version>
<abstract-schema-name>Customer</abstract-schema-name>
<cmp-field><field-name>id</field-name></cmp-field>
<cmp-field><field-name>lastName</field-name></cmp-field>
<cmp-field><field-name>firstName</field-name></cmp-field>
<primkey-field>id</primkey-field>
<security-identity><use-caller-identity/></security-identity>
</entity>
<entity>
<ejb-name>AddressEJB</ejb-name>
<local-home>com.titan.address.AddressHomeLocal</local-home>
<local>com.titan.address.AddressLocal</local>
<ejb-class>com.titan.address.AddressBean</ejb-class>
<persistence-type>Container</persistence-type>
<prim-key-class>java.lang.Integer</prim-key-class>
<reentrant>False</reentrant>
<cmp-version>2.x</cmp-version>
<abstract-schema-name>Address</abstract-schema-name>
<cmp-field><field-name>id</field-name></cmp-field>
<cmp-field><field-name>street</field-name></cmp-field>
<cmp-field><field-name>city</field-name></cmp-field>
<cmp-field><field-name>state</field-name></cmp-field>
<cmp-field><field-name>zip</field-name></cmp-field>
<primkey-field>id</primkey-field>
<security-identity><use-caller-identity/></security-identity>
</entity>
</enterprise-beans>
<relationships>
<ejb-relation>
<ejb-relation-name>Customer-Address</ejb-relation-name>
<ejb-relationship-role>
<ejb-relationship-role-name>Customer-has-an-Address</ejb-relationship-role-name>
<multiplicity>One</multiplicity>
<relationship-role-source>
<ejb-name>CustomerEJB</ejb-name>
</relationship-role-source>
<cmr-field>
<cmr-field-name>homeAddress</cmr-field-name>
</cmr-field>
</ejb-relationship-role>
<ejb-relationship-role>
<ejb-relationship-role-name>Address-belongs-to-Customer</ejb-relationship-role-name>
<multiplicity>One</multiplicity>
<relationship-role-source>
<ejb-name>AddressEJB</ejb-name>
</relationship-role-source>
</ejb-relationship-role>
</ejb-relation>
</relationships>
</ejb-jar>
在单向关系客户EJB有关系字段是homeAddress。 在数据库表中客户有一个列ADDRESS_ID。 如果做的是建立和是homeAddress ADDRESS_ID之间的映射。
也为deployement描述其中两个关系角色已经元素定义,但在实际的数据库表中只有一个表包含外键(在许多-一个又一个五月的情况下)的双向关系领域,我们需要从其他地图关系角色对任何列?
双向一到一个
<relationships>
<ejb-relation>
<ejb-relation-name>Customer-CreditCard</ejb-relation-name>
<ejb-relationship-role>
<ejb-relationship-role-name>Customer-has-a-CreditCard</ejb-relationship-role-name>
<multiplicity>One</multiplicity>
<relationship-role-source>
<ejb-name>CustomerEJB</ejb-name>
</relationship-role-source>
<cmr-field>
<cmr-field-name>creditCard</cmr-field-name>
</cmr-field>
</ejb-relationship-role>
<ejb-relationship-role>
<ejb-relationship-role-name>CreditCard-belongs-to-Customer</ejb-relationship-role-name>
<multiplicity>One</multiplicity>
<relationship-role-source>
<ejb-name>CreditCardEJB</ejb-name>
</relationship-role-source>
<cmr-field>
<cmr-field-name>customer</cmr-field-name>
</cmr-field>
</ejb-relationship-role>
</ejb-relation>
</relationships>
客户EJB有关系的信用卡领域,虽然信用卡式EJB有关系领域的客户。 在数据库中的客户表中有列CREDITCARD_ID而CREDIT_CARD表有列CUSTOMER_ID。 是有一个CREDITCARD_ID列它需要CUSTOMER表。 是否总是必要的抽象模式准确地映射到数据库模式? 是这种关系在部署的时候建立?