Hi I'm new to CMR. I tried to create a one-to-many relationship between CompanyBean entity bean and UserGroupBean entity bean by XDoclet. I'm using JBOSS3.2.3 and Postgresql 7.4.2.
Without creating the relationship between them, I was able to insert records into Postgresql database by both beans successfully. After I specified the relationship, I was able to create records in the database from the CompanyBean. However, when I tried to create a record by UserGroupBean, I was not able to create any record in the database. I received the following error message all the time. anonymous wrote : 15:33:07,030 ERROR [UserGroup] Could not create entity | org.postgresql.util.PSQLException: ERROR: column "company" of relation "usergroup" does not exist | | at org.postgresql.util.PSQLException.parseServerError(PSQLException.java:139) | at org.postgresql.core.QueryExecutor.executeV3(QueryExecutor.java:152) | at org.postgresql.core.QueryExecutor.execute(QueryExecutor.java:100) | at org.postgresql.core.QueryExecutor.execute(QueryExecutor.java:43) | at org.postgresql.jdbc1.AbstractJdbc1Statement.execute(AbstractJdbc1Statement.java:517) | at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:50) | at org.postgresql.jdbc1.AbstractJdbc1Statement.executeUpdate(AbstractJdbc1Statement.java:273) | at org.jboss.resource.adapter.jdbc.WrappedPreparedStatement.executeUpdate(WrappedPreparedStatement.java:324) | at org.jboss.ejb.plugins.cmp.jdbc.JDBCAbstractCreateCommand.executeInsert(JDBCAbstractCreateCommand.java:326) | at org.jboss.ejb.plugins.cmp.jdbc.JDBCAbstractCreateCommand.performInsert(JDBCAbstractCreateCommand.java:287) | at org.jboss.ejb.plugins.cmp.jdbc.JDBCAbstractCreateCommand.execute(JDBCAbstractCreateCommand.java:138) | at org.jboss.ejb.plugins.cmp.jdbc.JDBCStoreManager.createEntity(JDBCStoreManager.java:554) | at org.jboss.ejb.plugins.CMPPersistenceManager.createEntity(CMPPersistenceManager.java:208)... It seems like JBOSS tried to persist the data with column "company" in usergroup table, because UserGroupBean has the following methods. public abstract CompanyLocal getCompany(); | public abstract void setCompany(CompanyLocal companyLocal); | I also looked at jbosscmp-jdbc.xml, the <cmp-field>s of UserGroup do not contains "company" field. <--I think this is how it should be. I think I must have specified something wrong, and I don't think I need to build a column for the relationship because of the error message. I just needed to create a foreign key constraint, and to specify correct Xdoclet tags. Please correct me, if I'm wrong. Could anyone guide me to solve this problem please. I have not been able to solve this problem for days. Thanks you very much Kay PS: Part of my codes and database structure are shown below. The Database structure of the two relationships are below anonymous wrote : | Table "public.usergroup" | Column | Type | Modifiers | ----------------+------+----------- | usergroupid | text | not null | companyid | text | | modifiedbyuser | text | | Indexes: | "pk_usergroup" primary key, btree (usergroupid) | Foreign-key constraints: | "company" FOREIGN KEY (companyid) REFERENCES company(companyid) | anonymous wrote : Table "public.company" | Column | Type | Modifiers | -------------------+----------------+----------- | companyid | charprimarykey | not null | modifiedbyuser | charprimarykey | | companypreference | charprimarykey | | Indexes: | "company_pkey" primary key, btree (companyid) | anonymous wrote : List of domains | Schema | Name | Type | Modifier | --------+------------------+-----------------------------+---------- | public | charprimarykey | character(32) | | | CompanyBean.java contains | /** | * @ejb.bean name = "Company" | * type = "CMP" | * cmp-version = "2.x" | * display-name = "CompanyBean" | * description = "Company EJB" | * view-type = "both" | * jndi-name = "ejb/CompanyBeanHome" | * local-jndi-name = "ejb/CompanyBeanLocalHome" | * primkey-field = "companyID" | * schema="companyItem" | * | * @ejb.persistence table-name="company" | * | * @ejb.ejb-ref ejb-name="UserGroup" | * view-type="local" | * ref-name="UserGroupLocalHome" | * @jboss.ejb-ref-jndi ref-name = "UserGroupLocalHome" | * jndi-name = "ejb/UserGroupBeanLocalHome" | * @ejb:util | * generate="physical" | */ | public abstract class CompanyBean implements EntityBean { | | private CompanyDetailsLocalHome companyDetailsLocalHome; | | /** The EntityContext */ | private EntityContext context; | | /** | * @ejb.create-method | */ | public String ejbCreate(CompanyFullDetailsValue companyFullDetailsValue) throws CreateException { | //Set the values for this company table | setCompanyID(CompanyUtil.generateGUID(this)); | setModifiedByUser(companyFullDetailsValue.getModifiedByUser()); | setCompanyPreference(companyFullDetailsValue.getCompanyPreference()); | return getCompanyID(); | } | | public void ejbPostCreate(CompanyFullDetailsValue companyFullDetailsValue) throws CreateException { | } | public void ejbActivate() throws EJBException { | } | public void ejbPassivate() throws EJBException { | } | public void ejbLoad() throws EJBException { | } | public void ejbStore() throws EJBException { | } | public void ejbRemove() throws EJBException, RemoveException { | } | public void setEntityContext(EntityContext newContext) throws EJBException { | context = newContext; | } | public void unsetEntityContext() throws EJBException { | context = null; | } | | /** | * Returns the companyID | * @return the companyID | * | * @ejb.persistence | * column-name="companyID" | * sql-type="character(32)" | * @ejb.pk-field | * @ejb.interface-method | */ | public abstract String getCompanyID(); | | /** | * Sets the companyID | * | * @param java.lang.String the new companyID value | * | * @ejb.interface-method | */ | public abstract void setCompanyID(String companyID); | | /** | * Returns the person who modified the record of the company | * @return userID | * | * @ejb.persistent-field | * @ejb.persistence | * column-name="modifiedByUser" | * sql-type="character(32)" | * | * @ejb.interface-method | * | */ | public abstract String getModifiedByUser(); | | /** | * Sets the person who modified company record | * | * @param java.lang.String userID of the user | * | * @ejb.interface-method | */ | public abstract void setModifiedByUser(String userID); | | /** | * Returns the preference fo the company | * @return java.lang.String companyPreferenceID | * | * @ejb.persistence | * column-name="companypreference" | * sql-type="character(32)" | * | * @ejb.interface-method | * | */ | public abstract String getCompanyPreference(); | | /** | * Sets the person who modified company record | * | * @param java.lang.String userID value | * | * @ejb.interface-method | */ | public abstract void setCompanyPreference(String PreferenceID); | | /** | * @return Returns the collection of the local interface of UserGroupBean | * @ejb.interface-method | * @ejb.relation name="Company-UserGroup" | * role-name="CompanyHasUserGroups" | */ | public abstract Collection getUserGroup(); | | /** | * @param the collectino of the local interface of UserGroupBean | * @ejb.interface-method | */ | public abstract void setUserGroup(Collection userGroupLocal); | } UserGroupBean.java contains | /** | * @ejb.bean name = "UserGroup" | * type = "CMP" | * cmp-version = "2.x" | * display-name = "UserGroup" | * description = "UserGroup EJB" | * view-type = "both" | * jndi-name = "ejb/UserGroupBeanHome" | * local-jndi-name = "ejb/UserGroupBeanLocalHome" | * primkey-field = "userGroupID" | * schema="UserGroupItem" | * | * @ejb.persistence table-name="usergroup" | | * @ejb.ejb-ref ejb-name="Company" | * view-type="local" | * ref-name="CompanyBeanLocalHome" | * @jboss.ejb-ref-jndi ref-name = "CompanyBeanLocalHome" | * jndi-name = "ejb/CompanyBeanLocalHome" | * @ejb:util | * generate="physical" | */ | public abstract class UserGroup implements EntityBean { | | private UserGroupDetailsLocalHome userGroupDetailsLocalHome; | | /** The EntityContext */ | private EntityContext context; | | /** | * @ejb.create-method | */ | public String ejbCreate(UserGroupFullDetailsValue userGroupFullDetailsValue) throws CreateException { | | setUserGroupID(UserGroupUtil.generateGUID(this)); | setCompanyID(userGroupFullDetailsValue.getCompanyID()); | setModifiedByUser(userGroupFullDetailsValue.getModifiedByUser()); | userGroupFullDetailsValue.setUserGroupID(getUserGroupID()); | | return getUserGroupID(); | } | public void ejbPostCreate(UserGroupFullDetailsValue userGroupFullDetailsValue) throws CreateException { | } | public void ejbActivate() throws EJBException { | } | public void ejbPassivate() throws EJBException { | } | public void ejbLoad() throws EJBException { | } | public void ejbStore() throws EJBException { | } | public void ejbRemove() throws EJBException, RemoveException { | } | public void setEntityContext(EntityContext newContext) throws EJBException { | context = newContext; | } | public void unsetEntityContext() throws EJBException { | context = null; | } | | /** | * @return Returns the userGroupID. | * @ejb.persistence column-name="usergroupid" | * sql-type="character(32)" | * @ejb.pk-field | * @ejb.interface-method | */ | public abstract String getUserGroupID(); | | /** | * @param userGroupID The userGroupID to set. | * @ejb.interface-method | */ | public abstract void setUserGroupID(String userGroupID); | | /** | * @return Returns the companyID. | * @ejb.interface-method | * @ejb.persistence column-name="companyID" | * sql-type="character(32)" | */ | public abstract String getCompanyID(); | | /** | * @param companyID The companyID to set. | */ | public abstract void setCompanyID(String companyID); | | /** | * @return Returns the ModifiedByUser. | * @ejb.interface-method | * @ejb.persistence column-name="modifiedbyuser" | * sql-type="character(32)" | */ | public abstract String getModifiedByUser(); | | /** | * @param ModifiedByUser The ModifiedByUser to set. | * @ejb.interface-method | */ | public abstract void setModifiedByUser(String modifiedByUser); | | /** | * @return Returns the local interface of CompanyBean | * @ejb.interface-method | * @ejb.relation name="Company-UserGroup" | * role-name="UserGroupBelongsToACompany" | * @jboss.relation fk-constraint="false" | * related-pk-field="companyID" | * fk-column="companyID" | */ | public abstract CompanyLocal getCompany(); | | | /** | * @param the local interface of CompanyBean | * @ejb.interface-method | */ | public abstract void setCompany(CompanyLocal companyLocal); | ejb-jar.xml contains | <entity > | <description><![CDATA[Company EJB]]></description> | <display-name>CompanyBean</display-name> | | <ejb-name>Company</ejb-name> | | <home>com.j2ee.app.cmp.interfaces.CompanyHome</home> | <remote>com.j2ee.app.cmp.interfaces.Company</remote> | <local-home>com.j2ee.app.cmp.interfaces.CompanyLocalHome</local-home> | <local>com.j2ee.app.cmp.interfaces.CompanyLocal</local> | | <ejb-class>com.j2ee.app.cmp.ejb.CompanyCMP</ejb-class> | <persistence-type>Container</persistence-type> | <prim-key-class>java.lang.String</prim-key-class> | <reentrant>False</reentrant> | <cmp-version>2.x</cmp-version> | <abstract-schema-name>companyItem</abstract-schema-name> | <cmp-field > | <description><![CDATA[Returns the companyID]]></description> | <field-name>companyID</field-name> | </cmp-field> | <cmp-field > | <description><![CDATA[Returns the person who modified the record of the company]]></description> | <field-name>modifiedByUser</field-name> | </cmp-field> | <cmp-field > | <description><![CDATA[Returns the preference fo the company]]></description> | <field-name>companyPreference</field-name> | </cmp-field> | <primkey-field>companyID</primkey-field> | | <ejb-local-ref > | <ejb-ref-name>UserGroupLocalHome</ejb-ref-name> | <ejb-ref-type>Entity</ejb-ref-type> | <local-home>com.j2ee.app.cmp.interfaces.UserGroupLocalHome</local-home> | <local>com.j2ee.app.cmp.interfaces.UserGroupLocal</local> | <ejb-link>UserGroup</ejb-link> | </ejb-local-ref> | ... | ... | | <entity > | <description><![CDATA[UserGroup EJB]]></description> | <display-name>UserGroup</display-name> | | <ejb-name>UserGroup</ejb-name> | | <home>com.j2ee.app.cmp.interfaces.UserGroupHome</home> | <remote>com.j2ee.app.cmp.interfaces.UserGroup</remote> | <local-home>com.j2ee.app.cmp.interfaces.UserGroupLocalHome</local-home> | <local>com.j2ee.app.cmp.interfaces.UserGroupLocal</local> | | <ejb-class>com.j2ee.app.cmp.ejb.UserGroupCMP</ejb-class> | <persistence-type>Container</persistence-type> | <prim-key-class>java.lang.String</prim-key-class> | <reentrant>False</reentrant> | <cmp-version>2.x</cmp-version> | <abstract-schema-name>UserGroupItem</abstract-schema-name> | <cmp-field > | <description><![CDATA[]]></description> | <field-name>userGroupID</field-name> | </cmp-field> | <cmp-field > | <description><![CDATA[]]></description> | <field-name>companyID</field-name> | </cmp-field> | <cmp-field > | <description><![CDATA[]]></description> | <field-name>modifiedByUser</field-name> | </cmp-field> | <primkey-field>userGroupID</primkey-field> | | <ejb-local-ref > | <ejb-ref-name>CompanyBeanLocalHome</ejb-ref-name> | <ejb-ref-type>Entity</ejb-ref-type> | <local-home>com.j2ee.app.cmp.interfaces.CompanyLocalHome</local-home> | <local>com.j2ee.app.cmp.interfaces.CompanyLocal</local> | <ejb-link>Company</ejb-link> | </ejb-local-ref> | | | ... | ... | | | <ejb-relation > | <ejb-relation-name>Company-UserGroup</ejb-relation-name> | | <ejb-relationship-role > | <ejb-relationship-role-name>UserGroupBelongsToACompany</ejb-relationship-role-name> | <multiplicity>Many</multiplicity> | <relationship-role-source > | <ejb-name>UserGroup</ejb-name> | </relationship-role-source> | <cmr-field > | <cmr-field-name>company</cmr-field-name> | </cmr-field> | </ejb-relationship-role> | | <ejb-relationship-role > | <ejb-relationship-role-name>CompanyHasUserGroups</ejb-relationship-role-name> | <multiplicity>One</multiplicity> | <relationship-role-source > | <ejb-name>Company</ejb-name> | </relationship-role-source> | <cmr-field > | <cmr-field-name>userGroup</cmr-field-name> | <cmr-field-type>java.util.Collection</cmr-field-type> | </cmr-field> | </ejb-relationship-role> | | </ejb-relation> | jbosscmp-jdbc.xml contains | ... | <ejb-relation> | <ejb-relation-name>Company-UserGroup</ejb-relation-name> | | <ejb-relationship-role> | <ejb-relationship-role-name>UserGroupBelongsToACompany</ejb-relationship-role-name> | <fk-constraint>false</fk-constraint> | <key-fields/> | | </ejb-relationship-role> | <ejb-relationship-role> | <ejb-relationship-role-name>CompanyHasUserGroups</ejb-relationship-role-name> | <key-fields> | <key-field> | <field-name>companyID</field-name> | <column-name>companyID</column-name> | </key-field> | </key-fields> | | </ejb-relationship-role> | </ejb-relation> | ... | jboss.xml contains | <jboss> | | <enterprise-beans> | ... | <entity> | <ejb-name>Company</ejb-name> | <jndi-name>ejb/CompanyBeanHome</jndi-name> | <local-jndi-name>ejb/CompanyBeanLocalHome</local-jndi-name> | <ejb-local-ref> | <ejb-ref-name>ejb/UserGroupLocalHome</ejb-ref-name> | <jndi-name>ejb/UserGroupBeanLocalHome</jndi-name> | </ejb-local-ref> | | <method-attributes> | </method-attributes> | | </entity> | <entity> | <ejb-name>UserGroup</ejb-name> | <jndi-name>ejb/UserGroupBeanHome</jndi-name> | <local-jndi-name>ejb/UserGroupBeanLocalHome</local-jndi-name> | <ejb-local-ref> | <ejb-ref-name>ejb/CompanyBeanLocalHome</ejb-ref-name> | <jndi-name>ejb/CompanyBeanLocalHome</jndi-name> | </ejb-local-ref> | | <method-attributes> | </method-attributes> | | </entity> | ... | | </enterprise-beans> | | <resource-managers> | </resource-managers> | | </jboss> | View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=3836556#3836556 Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=3836556 ------------------------------------------------------- This SF.Net email is sponsored by: Oracle 10g Get certified on the hottest thing ever to hit the market... Oracle 10g. Take an Oracle 10g class now, and we'll give you the exam FREE. http://ads.osdn.com/?ad_id=3149&alloc_id=8166&op=click _______________________________________________ JBoss-user mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/jboss-user