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.