generate id for self referencing table hibernate mapping
Hi I have a table on DB2 database as follows:
id (PKey) doc_id(FKey pointing to id) not null
This is a strange legacy table that I cannot change. I cannot write/modify triggers either.
I am trying to create a hibernate mapping for this table but I can't figure out how to write this odd relationship.
I have two options: 1- tell Hibernate to leave id and doc_id as null then a trigger will set the values for me.
2- figure out a way to tell hibernate to use the sequence to set the values for both values at once.
I cannot seem to find a way to tell hibernate to do this?
any help is greatly appreciated.
<id name="id" type="java.lang.Long" column="ID">
<generator class="sequence">
<param name="sequence">SQ_DCMNT</param>
</gene开发者_JAVA技巧rator>
</id>
<property name="packageDcmntId" generated="insert">
<column name="PACKAGE_DCMNT_ID" not-null="true"/>
</property>
I would configure this entity to use a custom subclass of SequenceGenerator
or SequenceHiLoGenerator
to generate its ID. This custom subclass would override the generate method like this:
@Override
public Serializable generate(final SessionImplementor session, Object obj) {
Serializable result = super.generate(session, obj);
((MyBizarreEntity) obj).setPackageDcmntId((Long) result);
return result;
}
This way, the entity's property will automatically have the value of the generated ID, before the insert is made, which is necessary since the column has a not null constraint.
I've not tested it, but it should work.
Or you could just use a regular sequence generator for the ID, make sure that the access type is property and not field, and implement the setId
method like this:
/**
* Sets the ID as well as the packageDcmntId, since they share the same value
*/
public void setId(Long id) {
this.id = id;
this.packageDcmntId = id;
}
精彩评论