您好我有一个关于DB2数据库的表,如下所示:
id(PKey) doc_id(FKey指向id)not null
这是一个奇怪的遗产表,我无法改变。我也不能写/修改触发器。
我正在尝试为此表创建一个hibernate映射,但我无法弄清楚如何编写这种奇怪的关系。
我有两个选择: 1-告诉Hibernate将id和doc_id保留为null然后触发器将为我设置值。
2-找出一种方法告诉hibernate使用序列一次设置两个值的值。
我似乎找不到告诉hibernate这样做的方法吗?
非常感谢任何帮助。
<id name="id" type="java.lang.Long" column="ID">
<generator class="sequence">
<param name="sequence">SQ_DCMNT</param>
</generator>
</id>
<property name="packageDcmntId" generated="insert">
<column name="PACKAGE_DCMNT_ID" not-null="true"/>
</property>
答案 0 :(得分:1)
我会将此实体配置为使用SequenceGenerator
或SequenceHiLoGenerator
的自定义子类来生成其ID。这个自定义子类将覆盖生成方法,如下所示:
@Override
public Serializable generate(final SessionImplementor session, Object obj) {
Serializable result = super.generate(session, obj);
((MyBizarreEntity) obj).setPackageDcmntId((Long) result);
return result;
}
这样,在插入之前,实体的属性将自动具有生成的ID的值,这是必需的,因为该列具有非空约束。
我没有测试它,但它应该可以工作。
或者你可以只为ID使用常规序列生成器,确保访问类型是属性而不是 field ,并实现setId
像这样的方法:
/**
* 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;
}