2 Replies Latest reply on Jun 14, 2005 5:02 PM by jim burton

    one-to-many relationship for 2 cmp entity beans not working

    jim burton Newbie

      I have 2 cmp entity beans, ResourceBean and RentalBean that I want to have in a one-to-many whereby one Resource has many Rentals, each Rental is for one Resource. The RentalBean constructor requires an instance of the Local int. of Resource which I then use in a call to Rental.setResource. I was expecting this to update both sides of the rel'ship, ie add an element to Resource.rentals but this doesn't happen. There is binary content in the RENTALBEAN.RESOURCE column in hypersonic but RESOURCEBEAN.RENTALS remains null. When the tables are created an extra column is added to the RENTALBEAN table called RESOURCEBEAN_RENTALS which is always null and there is no extra column added to the RESOURCEBEAN table. This is my ejb-jar.xml:

      <?xml version="1.0"?>
      <!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/j2ee/dtds/ejb-jar_2_0.dtd">
      
      <ejb-jar>
      
       <display-name>swm22</display-name>
      
       <description>
       </description>
      
       <enterprise-beans>
       <entity>
       <description>Resource component</description>
       <display-name>ResourceBean</display-name>
       <ejb-name>ResourceBean</ejb-name>
       <local-home>swm22.ejb.LocalResourceHome</local-home>
       <local>swm22.ejb.LocalResource</local>
       <ejb-class>swm22.ejb.ResourceBean</ejb-class>
       <persistence-type>Container</persistence-type>
       <cmp-version>2.x</cmp-version>
       <abstract-schema-name>ResourceBean</abstract-schema-name>
       <prim-key-class>swm22.ejb.ResourcePK</prim-key-class>
       <reentrant>False</reentrant>
       <cmp-field><field-name>resourceId</field-name></cmp-field>
       <cmp-field><field-name>name</field-name></cmp-field>
       <cmp-field><field-name>description</field-name></cmp-field>
       <cmp-field><field-name>rentals</field-name></cmp-field>
       <cmp-field><field-name>category</field-name></cmp-field>
       <cmp-field><field-name>active</field-name></cmp-field>
       <query>
       <description>Get whole collection of Resources</description>
       <query-method>
       <method-name>findAll</method-name>
       <method-params/>
       </query-method>
       <ejb-ql>Select OBJECT(r) From ResourceBean r</ejb-ql>
       </query>
       <query>
       <description>Get a resource by name</description>
       <query-method>
       <method-name>findByName</method-name>
       <method-params>
       <method-param>java.lang.String</method-param>
       </method-params>
       </query-method>
       <ejb-ql>Select OBJECT(r) From ResourceBean r where r.name = ?1</ejb-ql>
       </query>
       </entity>
      
       <entity>
       <description>Rental component</description>
       <display-name>RentalBean</display-name>
       <ejb-name>RentalBean</ejb-name>
       <local-home>swm22.ejb.LocalRentalHome</local-home>
       <local>swm22.ejb.LocalRental</local>
       <ejb-class>swm22.ejb.RentalBean</ejb-class>
       <persistence-type>Container</persistence-type>
       <cmp-version>2.x</cmp-version>
       <abstract-schema-name>RentalBean</abstract-schema-name>
       <prim-key-class>swm22.ejb.RentalPK</prim-key-class>
       <reentrant>False</reentrant>
       <cmp-field><field-name>rentalId</field-name></cmp-field>
       <cmp-field><field-name>startDate</field-name></cmp-field>
       <cmp-field><field-name>endDate</field-name></cmp-field>
       <cmp-field><field-name>returnDate</field-name></cmp-field>
       <cmp-field><field-name>resource</field-name></cmp-field>
       <query>
       <description>Get whole collection of Rental</description>
       <query-method>
       <method-name>findAll</method-name>
       <method-params/>
       </query-method>
       <ejb-ql>Select OBJECT(r) From RentalBean r</ejb-ql>
       </query>
       </entity>
      
       <session>
       <ejb-name>ResourceRentalMgrBean</ejb-name>
       <home>swm22.ejb.ResourceRentalMgrHome</home>
       <remote>swm22.ejb.ResourceRentalMgr</remote>
       <ejb-class>swm22.ejb.ResourceRentalMgrBean</ejb-class>
       <session-type>Stateless</session-type>
       <transaction-type>Container</transaction-type>
       <ejb-local-ref>
       <ejb-ref-name>ejb/ResourceBean</ejb-ref-name>
       <ejb-ref-type>Entity</ejb-ref-type>
       <local-home>swm22.ejb.LocalResourceHome</local-home>
       <local>swm22.ejb.LocalResource</local>
       <ejb-link>ResourceBean</ejb-link>
       </ejb-local-ref>
       <ejb-local-ref>
       <ejb-ref-name>ejb/RentalBean</ejb-ref-name>
       <ejb-ref-type>Entity</ejb-ref-type>
       <local-home>swm22.ejb.LocalRentalHome</local-home>
       <local>swm22.ejb.LocalRental</local>
       <ejb-link>RentalBean</ejb-link>
       </ejb-local-ref>
       <security-identity>
       <use-caller-identity/>
       </security-identity>
       </session>
      
       </enterprise-beans>
      
       <relationships>
      
       <ejb-relation>
       <ejb-relation-name>ResourceRental</ejb-relation-name>
       <ejb-relationship-role>
       <ejb-relationship-role-name>ResourceHasRentals</ejb-relationship-role-name>
       <multiplicity>One</multiplicity>
       <relationship-role-source>
       <ejb-name>ResourceBean</ejb-name>
       </relationship-role-source>
       <cmr-field>
       <cmr-field-name>rentals</cmr-field-name>
       <cmr-field-type>java.util.Collection</cmr-field-type>
       </cmr-field>
       </ejb-relationship-role>
       <ejb-relationship-role>
       <ejb-relationship-role-name>RentalForResource</ejb-relationship-role-name>
       <multiplicity>Many</multiplicity>
       <relationship-role-source>
       <ejb-name>RentalBean</ejb-name>
       </relationship-role-source>
       <cmp-field>
       <cmp-field-name>resource</cmp-field-name>
       <cmp-field-type>swm22.ejb.LocalResource</cmp-field-type>
       </cmp-field>
       </ejb-relationship-role>
       </ejb-relation>
      
       </relationships>
      
       <assembly-descriptor>
       <container-transaction>
       <method>
       <ejb-name>ResourceBean</ejb-name>
       <method-name>*</method-name>
       </method>
       <trans-attribute>Supports</trans-attribute>
       </container-transaction>
       <container-transaction>
       <method>
       <ejb-name>RentalBean</ejb-name>
       <method-name>*</method-name>
       </method>
       <trans-attribute>Supports</trans-attribute>
       </container-transaction>
       <container-transaction>
       <method>
       <ejb-name>ResourceRentalMgrBean</ejb-name>
       <method-name>*</method-name>
       </method>
       <trans-attribute>Supports</trans-attribute>
       </container-transaction>
       <security-role>
       <role-name>users</role-name>
       </security-role>
       </assembly-descriptor>
      
      </ejb-jar>
      


      and in jbosscmp-jdbc.xml I have
       <enterprise-beans>
      
       <entity>
       <ejb-name>RentalBean</ejb-name>
       ...
       <cmp-field>
       <field-name>resource</field-name>
       <column-name>RESOURCE</column-name>
       </cmp-field>
       </entity>
      
       <entity>
       <ejb-name>ResourceBean</ejb-name>
       ...
       <cmp-field>
       <field-name>rentals</field-name>
       <column-name>RENTALS</column-name>
       </cmp-field>
       ...
       </entity>
      
       </enterprise-beans>
      


      where am I goin wrong?

      Thanks in advance