I agree composite keys are evil. Unfortunately I am stuck with a bad ERD model that can't be changed. I will post if I come up with something Travers
________________________________ From: Matt Raible [mailto:[EMAIL PROTECTED] Sent: Fri 2007/02/09 17:54 To: [email protected] Subject: Re: [appfuse-user] Weird problem with one-to-many and composite id I haven't - if you can avoid composite keys with Hibernate - your life will be much easier. I know that doesn't help though. ;-) Matt On 2/9/07, Travers Snyman <[EMAIL PROTECTED]> wrote: I think my problem is really that the foreign key is part of the composite id. Has anyone done something like this? ________________________________ From: Travers Snyman [mailto: [EMAIL PROTECTED] Sent: 09 February 2007 01:54 PM To: [email protected] Subject: [appfuse-user] Weird problem with one-to-many and composite id Hi, I have a one-to-many relationship model with the child side not having a primary key. So I use a composite key. The foreign key on the child side is part of the composite key. When I persist the model, the parent side is written to the table, but instead of an insert of the child side, if I look at the sql log it attemtps to do an update. I have looked at the hibernate docs and some examples and from what I understand, I am doing things right. Please assist if I am missing something. I use Appfuse 1.9.4 with hibernate. See my classes below: Thanks Travers //// parent class * @struts.form include-all="true" extends="BaseForm" * @hibernate.class table="qc_query_control" */ public class QueryControl extends BaseObject implements Serializable { private static final long serialVersionUID = 3832626166523359411L; protected Long id; < and rest of attributes> protected Set queryParameters = new HashSet(); // one to many relationship < then the getter for queryParameters> * @hibernate.set table = qp_query_parameter cascade="all-delete-orphan" role="oneToMany" lazy="false" * @hibernate.collection-key column="qp_qc_uid" * @hibernate.collection-one-to-many class="cam.model.QueryParameter" */ public Set getQueryParameters() { return queryParameters; } // Then the child class * @struts.form include-all="false" extends="BaseForm" * @hibernate.class table="qp_query_parameter" */ public class QueryParameter extends BaseObject implements Serializable { private static final long serialVersionUID = 3690147920654049848L; protected QueryParameterPK id; protected String qpMatchType; protected Long qpUserId; protected QueryControl queryControl; /** * Returns a reference to the queryControl it belongs to * @hibernate.many-to-one column="qp_qc_uid" insert="false" update="false" * class="cam.model.QueryControl" * cascade="none" */ public QueryControl getQueryControl() { return queryControl; } // the class QueryParameterPK is the composite class public class QueryParameterPK extends BaseObject implements Serializable { private static final long serialVersionUID = 3690147920654049848L; protected Long qpQcUid; protected Long qpQptUid; < the attribute qpQcUid refers to the foreign key> * @hibernate.property column="qp_qc_uid" not-null="true" */ public Long getQpQcUid() { return qpQcUid; } * @hibernate.property column="qp_qpt_uid" not-null="true" */ public Long getQpQptUid() { return qpQptUid; } * @hibernate.property column="qp_start_date" not-null="true" */ public Date getQpStartDate() { return qpStartDate; } public void setQpStartDate(Date qpStartDate) { this.qpStartDate = qpStartDate; } -- http://raibledesigns.com <http://raibledesigns.com/>
<<winmail.dat>>
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
