如何在db trigger创建id时禁用生成器

时间:2011-05-12 14:04:30

标签: java hibernate db2

目前,当我尝试插入新记录时,我收到错误:

[ERROR] 05/12 / 11_09:44:20.54 [org.hibernate.event.def.AbstractFlushingEventListener] - 无法将数据库状态与会话同步

Db2触发生成需要保留的ID以支持遗留应用程序。如何配置hbm.xml以不生成ID?

1 个答案:

答案 0 :(得分:0)

我不确定您使用的是哪种版本的Hibernate,但Hibernate目前支持通过名为select的特殊生成器获取触发器生成的ID。

简而言之,您可以将此生成器添加到ID列,然后引用可用于检索触发器生成ID的自然键,如下所示:

<id name="id" type="long" column="person_id">
  <generator class="select">
    <param name="key">socialSecurityNumber</param>
  </generator>
</id>

如果您的映射已经定义了自然键条目,那么您甚至不需要为生成器指定key参数。

此特定生成器的一个问题是您只能使用一个实体属性作为它的选择键。如果需要通过复合键进行选择,则必须为此创建自己的生成器。

您可以扩展org.hibernate.id.SelectGenerator或其中一个父项,然后通过多个列实现选择。然后,您只需使用新生成器的完全限定类名替换上述生成器条目的class属性。