-->

EJB2.x容器管理的关系(EJB2.x container managed relationshi

2019-10-29 02:37发布

我是一个总的新手,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表。 是否总是必要的抽象模式准确地映射到数据库模式? 是这种关系在部署的时候建立?

Answer 1:

是的,从CMP元数据到数据库表的映射发生在使用特定供应商的工具部署时间。 从EJB 3.0规范:

对于EJB 2.1实体bean的EJB部署描述符描述实体bean中的逻辑关系。 它不用于指定实体bean或一组相互关联的实体bean的抽象持久性是如何被映射到底层数据库提供了一种机制。 这是部署者,谁使用容器提供的工具,使用了在部署描述符中指定映射到特定于底层资源的物理关系的逻辑关系的责任。



文章来源: EJB2.x container managed relationship
标签: ejb-2.x