2011-05-12 33 views
2

禁用发电机目前,当我尝试插入新记录,我得到一个错误:如何在数据库触发器创建ID

[错误] 5月12日/ 11_09:44:20.54 [org.hibernate.event.def .AbstractFlushingEventListener] - 无法使数据库状态与会话同步

Db2触发器生成的ID需要保留以支持传统应用程序。我怎样才能配置hbm.xml不生成ID?

回答

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属性替换为新生成器的全限定类名。