1 2 Previous Next 18 Replies Latest reply on Mar 21, 2003 11:51 AM by reddyn Go to original post
      • 15. Re: duplicate columns created - revisited
        jacyg

        I *think* I am having the same problem in JBoss 3.0.6, and also would prefer to not have to go about applying the patch by hand, if not entirely necessary. As an aside, how difficult would it be to post a class file, or even a .java file, instead of a diff?? Or at least in addition to? At any rate, if anyone has had any success with the patch or knows of another solution, I am at my wits end and am, for the time being, going to go ahead without any relationships at all (in hopes that I'll be able to put them back in once I've learned of a good solution). Just for your edification, here's the code from the descriptors for a sample relationship that, in the absence of all other relationships, causes me to get a "duplicate columns" error when creating a Users object. I've included both the entity bean declarations and the relationship declarations in the hopes that someone might see *something* that I could do to resolve this issue.

        ****************************************
        from ejb-jar.xml:
        ****************************************
        <entity>
        <display-name>Users</display-name>
        <ejb-name>Users</ejb-name>
        <local-home>com.fuelquest.users.ejb.UsersHome</local-home>
        <local>com.fuelquest.users.ejb.Users</local>
        <ejb-class>com.fuelquest.users.ejb.UsersBean</ejb-class>
        <persistence-type>Container</persistence-type>
        <prim-key-class>java.lang.Long</prim-key-class>
        <reentrant>False</reentrant>
        <cmp-version>2.x</cmp-version>
        <abstract-schema-name>users</abstract-schema-name>
        <cmp-field>
        <field-name>id</field-name>
        </cmp-field>
        <cmp-field>
        <field-name>username</field-name>
        </cmp-field>
        <cmp-field>
        <field-name>roleId</field-name>
        </cmp-field>
        <primkey-field>id</primkey-field>
        <query>
        <query-method>
        <method-name>findByUsername</method-name>
        <method-params>
        <method-param>java.lang.String</method-param>
        </method-params>
        </query-method>
        <ejb-ql>SELECT OBJECT(u) FROM users u WHERE u.username = ?1</ejb-ql>
        </query>
        </entity>
        <entity>
        <display-name>Roles</display-name>
        <ejb-name>Roles</ejb-name>
        <local-home>com.fuelquest.users.ejb.RolesHome</local-home>
        <local>com.fuelquest.users.ejb.Roles</local>
        <ejb-class>com.fuelquest.users.ejb.RolesBean</ejb-class>
        <persistence-type>Container</persistence-type>
        <prim-key-class>java.lang.Long</prim-key-class>
        <reentrant>False</reentrant>
        <cmp-version>2.x</cmp-version>
        <abstract-schema-name>Roles</abstract-schema-name>
        <cmp-field>
        <field-name>roleId</field-name>
        </cmp-field>
        <cmp-field>
        <field-name>name</field-name>
        </cmp-field>
        <cmp-field>
        <field-name>description</field-name>
        </cmp-field>
        <primkey-field>roleId</primkey-field>
        </entity>
        <relationships>
        <ejb-relation>
        <ejb-relation-name>roles-users</ejb-relation-name>
        <ejb-relationship-role>
        <description>roles</description>
        <ejb-relationship-role-name>RolesRelationshipRole</ejb-relationship-role-name>
        <multiplicity>One</multiplicity>
        <relationship-role-source>
        <description>roles</description>
        <ejb-name>Roles</ejb-name>
        </relationship-role-source>
        <cmr-field>
        <description>users</description>
        <cmr-field-name>users</cmr-field-name>
        <cmr-field-type>java.util.Collection</cmr-field-type>
        </cmr-field>
        </ejb-relationship-role>
        <ejb-relationship-role>
        <description>users</description>
        <ejb-relationship-role-name>UsersRelationshipRole</ejb-relationship-role-name>
        <multiplicity>Many</multiplicity>
        <relationship-role-source>
        <description>users</description>
        <ejb-name>Users</ejb-name>
        </relationship-role-source>
        </ejb-relationship-role>
        </ejb-relation>
        </relationships>
        ****************************************
        and from the jbosscmp-jdbc.xml:
        ****************************************

        <entity>
        <ejb-name>Users</ejb-name>
        <table-name>USERS</table-name>
        <cmp-field>
        <field-name>id</field-name>
        <column-name>ID</column-name>
        </cmp-field>
        <cmp-field>
        <field-name>username</field-name>
        <column-name>USER_NAME</column-name>
        </cmp-field>
        <cmp-field>
        <field-name>roleId</field-name>
        <column-name>ROLE_ID</column-name>
        </cmp-field>
        </entity>

        <entity>
        <ejb-name>Roles</ejb-name>
        <table-name>ROLES</table-name>
        <cmp-field>
        <field-name>roleId</field-name>
        <column-name>ROLE_ID</column-name>
        </cmp-field>
        <cmp-field>
        <field-name>name</field-name>
        <column-name>NAME</column-name>
        </cmp-field>
        <cmp-field>
        <field-name>description</field-name>
        <column-name>DESCRIPTION</column-name>
        </cmp-field>
        </entity>

        <relationships>
        <ejb-relation>
        <ejb-relation-name>roles-users</ejb-relation-name>
        <foreign-key-mapping />
        <ejb-relationship-role>
        <ejb-relationship-role-name>RolesRelationshipRole</ejb-relationship-role-name>
        <key-fields>
        <key-field>
        <field-name>roleId</field-name>
        <column-name>ROLE_ID</column-name>
        </key-field>
        </key-fields>
        </ejb-relationship-role>
        <ejb-relationship-role>
        <ejb-relationship-role-name>UsersRelationshipRole</ejb-relationship-role-name>
        </ejb-relationship-role>
        </ejb-relation>
        </relationships>

        • 16. Re: duplicate columns created - revisited
          tommyg

          This has got to be a popular problem. One, CMR is a big feature in J2EE, and two many dba's like to make composite keys consisting of 2 columns-one column is unique for that record, and the other is a foreign key. Could someone from the JBoss group give some insights into their thoughts on this problem, and hopefully coming solutions?

          • 17. Re: duplicate columns created - revisited
            jacyg

            I had the same problem. Someone else at my company tried the patch, didn't seem to work...although I didn't spend too much time checking it b/c it seems to work in 3.2.0RC3.

            • 18. Re: duplicate columns created - revisited
              reddyn

              I downloaded and used 3.2.0RC3 to see whether it would resolve my problem. But it didn't. It gave me the following error:

              10:56:22,565 ERROR [LogInterceptor] EJBException, causedBy:
              java.lang.IllegalStateException: Can't modify relationship: CMR field SiteUsers.
              underlyingUser has foreign key fields mapped to the primary key columns. Primary
              key may only be set once in ejbCreate [EJB 2.0 Spec. 10.3.5].


              Here is a snippet of the table and relationship:


              <ejb-name>SiteUsers</ejb-name>
              <table-name>Site_User</table-name>
              <cmp-field>
              <field-name>id</field-name>
              <column-name>user_key</column-name>
              </cmp-field>
              <cmp-field>
              <field-name>isAuthorized</field-name>
              <column-name>is_authorized</column-name>
              </cmp-field>
              <cmp-field>
              <field-name>resetPasswordOnNextLogin</field-name>
              <column-name>reset_pwd_on_next_login</column-name>
              </cmp-field>
              <cmp-field>
              <field-name>recievePerformanceUpdateEmails</field-name>
              <column-name>recieve_perf_email</column-name>
              </cmp-field>
              <cmp-field>
              <field-name>hasAggreedToTermsOfUse</field-name>
              <column-name>aggreed_to_terms_of_service</column-name>
              </cmp-field>



              <ejb-relation>
              <ejb-relation-name>SiteUser-User</ejb-relation-name>
              <foreign-key-mapping/>
              <ejb-relationship-role>
              <ejb-relationship-role-name>User-Belongs-To-SiteUser</ejb-relationship-role-name>
              <key-fields>
              <key-field>
              <field-name>id</field-name>
              <column-name>user_key</column-name>
              </key-field>
              </key-fields>
              </ejb-relationship-role>
              <ejb-relationship-role>
              <ejb-relationship-role-name>SiteUser-has-One-User</ejb-relationship-role-name>
              <key-fields></key-fields>
              </ejb-relationship-role>
              </ejb-relation>

              If someone has a solution, please let me know. I'm definitely curious, as jacyg said that using 3.2.0RC3 worked for them.

              Thanks

              1 2 Previous Next