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!