Hi, really frustating... been trying to get my CMR setup for last three days but without much success (shame).
My setup is simple. I have three beans: 1. UserBean 2. GroupBean 3. GroupMembershipBean Each User (UserBean) can belong to multiple Group(s) (GroupBean). 1. UserBean maps to table USERS, table schema: Primary key: UIN Other fields: login, email, ... etc 2. GroupBean maps to table GROUPS, table schema: Primary key: UIN Other fields: name, decription, ... etc 3. GroupMembershipBean maps to table GROUPMEMBERSHIP, table schema: Composite Primary Key: {GROUPUIN, USERUIN} Foreign key on USERUIN and GROUPUIN that points to table USERS and table GROUPS There's a One-To-Many relationship between GroupBean (One-side) and GroupMembership (Many-side). 1. GroupBean: | /** | * @ejb.bean | * name="GroupEJB" | * local-jndi-name="ejb/UserGroup" | * display-name="User Group EJB" | * description="User Group EJB" | * cmp-version="2.x" | * type="CMP" | * view-type="local" | * schema="Group" | * reentrant="false" | * primkey-field="UIN" | * | * @ejb.persistence | * table-name="GROUPS" | * | * @ejb.finder | * query="SELECT OBJECT(g) FROM Group AS g" | * signature="java.util.Collection findAllGroups()" | * | * @ejb.interface | * local-extends="javax.ejb.EJBLocalObject, java.lang.Comparable, java.io.Serializable" | * local-class="com.aa.samples.interfaces.GroupLocal" | * | * @ejb.home | * local-class="com.aa.samples.interfaces.GroupLocalHome" | * | * @jboss.persistence | * datasource="java:/jdbc/dev01" | * datasource-mapping="mySQL" | * create-table="false" | * remove-table="false" | */ | public abstract class GroupBean implements EntityBean, Serializable, Comparable { | ... other stuff ... | /** | * @ejb.relation | * name="GroupEJB-GroupMembershipEJB" | * role-name="GroupEJB-has-GroupMembershipEJB" | * | * @ejb.interface-method | */ | public abstract Collection getGroupMembershipBean(); | public abstract void setGroupMembershipBean(Collection memberships); | ... other stuff ... | } | 2. GroupMembershipBean: | /** | * | * @ejb.bean | * name="GroupMembershipEJB" | * local-jndi-name="ejb/GroupMembership" | * display-name="Group Membership EJB" | * description="Group Membership Group EJB" | * cmp-version="2.x" | * type="CMP" | * view-type="local" | * schema="GroupMembership" | * reentrant="false" | * | * @ejb.persistence | * table-name="GROUPMEMBERSHIP" | * | * @ejb.pk | * class="com.aa.samples.primarykeys.GroupMembershipKey" | * | * @ejb.interface | * local-extends="javax.ejb.EJBLocalObject, java.lang.Comparable, java.io.Serializable" | * local-class="com.aa.samples.interfaces.GroupMembershipLocal" | * | * @ejb.home | * local-class="com.aa.samples.interfaces.GroupMembershipLocalHome" | * | * @jboss.persistence | * datasource="java:/jdbc/dev01" | * datasource-mapping="mySQL" | * create-table="false" | * remove-table="false" | */ | public abstract class GroupMembershipBean implements EntityBean, Serializable, Comparable { | ... other stuff ... | /** | * @ejb.persistent-field | * @ejb.persistence | * column-name="GROUPUIN" | * sql-type="INTEGER" | * @ejb.pk-field | * @ejb.interface-method | * | */ | public abstract Integer getGroupUIN(); | | /** | * @ejb.interface-method | */ | public abstract void setGroupUIN(Integer groupUIN); | | /** | * @ejb.persistent-field | * @ejb.persistence | * column-name="USERUIN" | * sql-type="INTEGER" | * @ejb.pk-field | * @ejb.interface-method | */ | public abstract Integer getUserUIN(); | | /** | * @ejb.interface-method | */ | public abstract void setUserUIN(Integer userUIN); | | /** | * @ejb.relation | * name="GroupEJB-GroupMembershipEJB" | * role-name="GroupMembershipEJB-has-GroupEJB" | * target-multiple="yes" | * cascade-delete="yes" | * | * @jboss.relation | * related-pk-field="UIN" | * fk-column="GROUPUIN" | * | * @ejb.interface-method | */ | public abstract GroupLocal getGroup(); | | public abstract void setGroup(GroupLocal group); | ... other stuff ... | } | I ran XDoclet, BOTH "ejb-jar.xml" and "jbosscmp-jdbc.xml" looks right: 1. ""ejb-jar.xml" ... other stuff ... <ejb-relation > <ejb-relation-name>GroupEJB-GroupMembershipEJB</ejb-relation-name> <ejb-relationship-role > <ejb-relationship-role-name>GroupMembershipEJB-has-GroupEJB</ejb-relationship-role-name> Many <cascade-delete/> <relationship-role-source > <ejb-name>GroupMembershipEJB</ejb-name> </relationship-role-source> <cmr-field > <cmr-field-name>group</cmr-field-name> </cmr-field> </ejb-relationship-role> <ejb-relationship-role > <ejb-relationship-role-name>GroupEJB-has-GroupMembershipEJB</ejb-relationship-role-name> One <relationship-role-source > <ejb-name>GroupEJB</ejb-name> </relationship-role-source> <cmr-field > <cmr-field-name>groupMembershipBean</cmr-field-name> <cmr-field-type>java.util.Collection</cmr-field-type> </cmr-field> </ejb-relationship-role> </ejb-relation> ... other stuff ... 2. "jbosscmp-jdbc.xml" ... other stuff ... <ejb-relation> <ejb-relation-name>GroupEJB-GroupMembershipEJB</ejb-relation-name> <ejb-relationship-role> <ejb-relationship-role-name>GroupMembershipEJB-has-GroupEJB</ejb-relationship-role-name> <key-fields/> </ejb-relationship-role> <ejb-relationship-role> <ejb-relationship-role-name>GroupEJB-has-GroupMembershipEJB</ejb-relationship-role-name> <key-fields> <key-field> <field-name>UIN</field-name> <column-name>GROUPUIN</column-name> </key-field> </key-fields> </ejb-relationship-role> </ejb-relation> ... other stuff ... The problem is, | ... | GroupLocal group=groupHome.findByPrimaryKey(groupUIN); | Collection membershiplist=group.getGroupMembershipBean(); //EXCEPTION THROWN | ... | And the exception msg is: | javax.ejb.TransactionRolledbackLocalException: Load relation failed; CausedByException is: | Syntax error or access violation message from server: "You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM GROUPMEMBERSHIP WHERE (GROUPUIN=1)' at line 1"; CausedByException is: | Load relation failed; CausedByException is: | Syntax error or access violation message from server: "You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM GROUPMEMBERSHIP WHERE (GROUPUIN=1)' at line 1" | I used p6spy (http://www.p6spy.com/) to intercept any SQL to database, and I found: | 1099567741656|-1||resultset|SELECT name, description, isSuspended FROM GROUPS WHERE (UIN='1')|description = Administrators Group, name = Administrators | | 1099567755138|161|0|statement|SELECT FROM GROUPMEMBERSHIP WHERE (GROUPUIN=?)|SELECT FROM GROUPMEMBERSHIP WHERE (GROUPUIN='1') | Notice on second line: SELECT FROM (GROUPUIN='1') instead of: SELECT * FROM (GROUPUIN=1) There're two things weird about this: a. SELECT * --- The "*" is missing - this is not present in error message when I stepped thru the code. b. GROUPUIN='1' --- why's there's single quote around '1'? Help! I've been staring at this for sometime now and it's getting desparate. HELP! View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=3853850#3853850 Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=3853850 ------------------------------------------------------- This SF.Net email is sponsored by: Sybase ASE Linux Express Edition - download now for FREE LinuxWorld Reader's Choice Award Winner for best database on Linux. http://ads.osdn.com/?ad_id=5588&alloc_id=12065&op=click _______________________________________________ JBoss-user mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/jboss-user