Composite primary keys don't work?
truto Jan 18, 2006 2:37 PMHi all, I've been struggling to start a jboss+seam application. Everything seems to be ok except a major stopper problem. Composite PKs appear to not work at all, including the CRUD application that is automatically generated by hibernate tools.
An example; I have this table PARAMETIZATION that contains 10 plain columns but none PK.
So I end up with Parametization and ParametizationId:
Parametization:
@Entity
@Table(name="PARAMETIZATION"
)
public class Parametization implements java.io.Serializable {
private ParametizationId id;
(...)
@Id @EmbeddedId
@AttributeOverrides( {
@AttributeOverride(name="planId", column=@Column(name="PLAN_ID", unique=false, nullable=false, insertable=true, updatable=true, len
gth=30) ),
@AttributeOverride(name="moduleId", column=@Column(name="MODULE_ID", unique=false, nullable=false, insertable=true, updatable=true,
length=30) ), (...)
ParametizationId
@Embeddable
public class ParametizationId implements java.io.Serializable {
private String planId;
private String moduleId;
private String productName;
(...)
When the entitymanager query for Parametization, I see on logs a correct query being made:
select parametiza0_.PLAN_ID as PLAN1_557_, parametiza0_.MODULE_ID as MODULE2_557_, parametiza0_.PRODUCT_NAME as PRODUCT3_557_, parametiza0_.PARAM_NAME as PARAM4_557_, parametiza0_.NUM_INTERVAL_FROM as NUM5_557_, parametiza0_.NUM_INTERVAL_TO as NUM6_557_, parametiza0_.NUM_VALUE as NUM7_557_, parametiza0_.CHAR_PARAM_VALUE as CHAR8_557_, parametiza0_.CHAR_VALUE as CHAR9_557_, parametiza0_.PARAM_TYPE as PARAM10_557_ from PARAMETIZATION parametiza0_
This query returns the table data. On the Finder bean, it actually returns the real number of lines, but all list objects are null.
parametizationList = (List<Parametization>) query.setMaxResults(pageSize)
.setFirstResult(pageSize*pageNumber)
.getResultList();
log.info("got: "+parametizationList.size()+" results"); // CORRECT VALUE HERE
for (Parametization p : parametizationList) {
if (p == null)
log.info("NULL"); // IT FALLS HERE ALL CASES
else
log.info("got: "+p.getId().getPlanId()+" "+p.getId().getModuleId());
}
I'm using jboss403sp1 and jboss-seam-1.0beta1 and jboss-seam-cvs as of 11-jan-06 (neither works), with hibernate-annotations.jar hibernate3.jar updated from HibernateTools-3.1.0.N200512200952
Oh, if I inline the keys in the entity bean and set only one to @Id it works, but I'm afraid this might cause troubles on updates and deletes.
Thanks in advance for any help.