我有一个保存在 Oracle 模式中的实体。在 DB 插入时,触发器使用 DB 序列生成实体 ID。使用触发器是强制性的,因为它还会更新 ID 生成序列(一种日志表)旁边的另一个表,这对于遗留组件很重要。
如何在我的实体映射中配置 Hibernate id 生成器?
环顾类似的 Stackoverflow 问题,我发现了一些不适合我的解决方案:
- 直接使用序列:
<generator class="sequence">...</generator>
. 这是不可能的,因为其余的触发代码不会被执行 - 使用
<generator class="select">...</generator>
which 表示插入后,Hibernate 使用另一个唯一属性选择实体(根据 Hibernate-3.3 手册 5.1.4.6. )。这在此处也是不可能的,因为没有其他唯一列并且不支持使用一组属性。 - 打电话前使用
<generator class="assigned">...</generator>
和设置假身份证save()
。DB 触发器将忽略此 ID,并且生成的 DB 行将具有正确的 ID。但是,我的 Java 实例没有,而且这个解决方案很难看,因为它对触发器的实现做出了假设。
这个问题有好的解决方案吗?