-
1. Re: composite PK problem
erik777 Nov 23, 2001 12:53 AM (in response to milesifr)Your latter JAWS.XML example is correct; the field names should be field1 and field2, not myPK.
In your EJB-JAR.XML, leave the primary-key tag blank.
Here is a sample EJB-JAR entry:
[pre]
RoleModule EJB
<ejb-name>RoleModuleBean</ejb-name>
net.openstandards.ejb.entity.security.RoleModuleHome
net.openstandards.ejb.entity.security.RoleModule
<ejb-class>net.openstandards.ejb.entity.security.RoleModuleBean</ejb-class>
<persistence-type>Container</persistence-type>
<prim-key-class>net.openstandards.ejb.entity.security.RoleModuleKey</prim-key-class>
False
<cmp-field><field-name>roleId</field-name></cmp-field>
<cmp-field><field-name>moduleId</field-name></cmp-field>
<cmp-field><field-name>canCreate</field-name></cmp-field>
<cmp-field><field-name>canRetrieve</field-name></cmp-field>
<cmp-field><field-name>canUpdate</field-name></cmp-field>
<cmp-field><field-name>canDelete</field-name></cmp-field>
<primkey-field></primkey-field>
[/pre]
Here is the JAWS.XML entry:
[pre]
<ejb-name>RoleModuleBean</ejb-name>
<table-name>RoleModules</table-name>
<pk-constraint>true</pk-constraint>
<cmp-field>
<field-name>roleId</field-name>
<column-name>roleId</column-name>
<jdbc-type>INTEGER</jdbc-type>
<sql-type>INTEGER</sql-type>
</cmp-field>
<cmp-field>
<field-name>moduleId</field-name>
<column-name>moduleId</column-name>
<jdbc-type>INTEGER</jdbc-type>
<sql-type>INTEGER</sql-type>
</cmp-field>
<cmp-field>
<field-name>canCreate</field-name>
<column-name>canCreate</column-name>
<jdbc-type>VARCHAR</jdbc-type>
<sql-type>CHAR(1)</sql-type>
</cmp-field>
<cmp-field>
<field-name>canRetrieve</field-name>
<column-name>canRetrieve</column-name>
<jdbc-type>VARCHAR</jdbc-type>
<sql-type>CHAR(1)</sql-type>
</cmp-field>
<cmp-field>
<field-name>canUpdate</field-name>
<column-name>canUpdate</column-name>
<jdbc-type>VARCHAR</jdbc-type>
<sql-type>CHAR(1)</sql-type>
</cmp-field>
<cmp-field>
<field-name>canDelete</field-name>
<column-name>canDelete</column-name>
<jdbc-type>VARCHAR</jdbc-type>
<sql-type>CHAR(1)</sql-type>
</cmp-field>
[/pre]
Here is the composite key class:
[pre]
public class RoleModuleKey implements java.io.Serializable {
public Integer roleId, moduleId ;
/** Creates new RoleKey */
public RoleModuleKey() { }
public RoleModuleKey(Integer _roleId, Integer _moduleId) {
roleId = _roleId ;
moduleId = _moduleId ;
}
public Integer getRoleId() { return roleId; }
public Integer getModuleId() { return moduleId; }
public boolean equals(Object other) {
if (other instanceof RoleModuleKey) {
return (
roleId.equals( ((RoleModuleKey) other).roleId) &&
moduleId.equals( ((RoleModuleKey) other).moduleId)
// this.hashCode() == ((RoleModuleKey) other).hashCode()
);
}
return false;
}
public int hashCode() {
String sResult = roleId.toString() + "," + moduleId.toString() ;
return sResult.hashCode();
}
}
[/pre]