CMP - composite primary key - @ejb.primkey spec
lameguy Nov 1, 2004 9:24 AMHi, I have this GroupMembershipBean which has a composite primary key:
1. database field: GROUPUIN (Integer)
getter: Integer getGroupUIN()
setter: void setGroupUIN(Integer)
2. database field: USERUIN (Integer)
getter: Integer getUserUIN()
setter: void setUserUIN(Integer)
My question is, what should I specify in @ejb.bean's "primkey-field" attribute? Can I specify "primkey-field" as a comma-delimited string:
@ejb.bean ... primkey-field "GROUPUIN, USERUIN" (Do I speicfy "database field name here?) ... public abstract class GroupMembershipBean implements EntityBean, Serializable, Comparable { ... ... }
Then, for GroupUIN and UserUIN getters. specify "@ejb.pk-field" attribute (See code below)
If not, do I have to implement a "primary key class" and specify "@ejb.pk class" (corresponds to <prim-key-class> in "ejb-jar.xml")? Is this a MUST (can I make do without)?
public class GroupMembershipKey implements Serializable { public Integer GroupUIN; public Integer UserUIN; public GroupMembershipKey() {} public GroupMembershipKey(Integer GroupUIN, Integer UserUIN) { if(GroupUIN==null || UserUIN==null) { throw new Exception(); } this.GroupUIN=GroupUIN; this.UserUIN=UserUIN; return; } public Integer getGroupUIN() { return GroupUIN; } public Integer getUserUIN() { return UserUIN; } public boolean equals(Object o) { GroupMembershipKey key=null; if(o instanceof GroupMembershipKey) { key=(GroupMembershipKey) o; if(GroupUIN.equals(key.getGroupUIN) && UserUIN.equals(key.getUserUIN)) { return true; } else { return false; } } else { return false; } } public String toString() { StringBuffer buf=new StringBuffer("GroupMembershipKey "); buf.append(" Group UIN: ").append(GroupUIN); buf.append(" User UIN: ").append(UserUIN); return buf.toString(); } }
For reference, here's GroupMembershipBean class:
/** * * @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" * primkey-field="???" What should I specify here? * * @ejb.persistence * table-name="GROUPMEMBERSHIP" * * @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 ... /* * Persistence methods: */ /** * @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); ... other stuff ... }
Thanks in advance!