我有一个实体在Oracle模式中持久化。在DB插入中,触发器通过使用DB序列来生成实体ID。使用触发器是强制性的,因为它还更新对于传统组件重要的ID生成序列(日志表类型)旁边的另一个表。Oracle之前插入触发器和Hibernate ID生成器设置
如何在我的实体映射中配置Hibernate ID生成器?
寻找类似的问题#1的时候,我找到了一些解决方案,不适合我的情况:
- 直接使用顺序:
<generator class="sequence">...</generator>
。这是不可能的,因为其余触发代码不会被执行 - 使用
<generator class="select">...</generator>
这意味着在插入后,Hibernate使用另一个唯一属性(根据Hibernate-3.3手册5.1.4.6)选择实体。这在这里也是不可能的,因为没有其他独特的列,并且不支持使用一组属性。 - 在拨打
save()
之前使用<generator class="assigned">...</generator>
并设置假ID。此ID将被DB触发器忽略,并且生成的DB行将具有正确的ID。但是,我的Java实例不会有这个解决方案,因为它对触发器的实现做出了假设。
是否有解决此问题的好方法?
什么是标识符?它返回插入的标识号 – Firo 2012-02-08 16:21:18
某些东西听起来如果与该数据库触发器有关,应该只写入一个序列值,如果没有在插入中提供,例如'IF:new .pk_id IS NULL然后选择my_seq.NEXTVAL INTO:new.pk_id FROM DUAL; END IF;' - 然后触发器的其余部分可以使用ID,无论它是由触发器还是由Hibernate提供。 – 2012-02-10 06:32:09
好吧,对不起已经回答了这个问题: @Firo:“身份”不支持Oracle(http://www.roseindia.net/hibernate/hibernateidgenera torelement.shtml) – rainer198 2012-07-09 15:30:22