我有一个具有Oracle数据库的应用程序,其中每个表都有一个触发器,该触发器调用序列以获取该行的下一个ID。如何配置我的域,以便Hibernate不在插入上指定下一个ID,只让Oracle和触发器处理它?</ p>
以前我的域名设置使用序列生成器,这似乎有效。我不能在我们的生产系统上使用它,因为DBA不允许我为Grails的序列授予select权限。这显然打破了Hibernate的生成器。
答案 0 :(得分:5)
有一个Hibernate论坛主题,它讨论了一个自定义生成器,它使用JDBC插入中的generatedKeys
来检索id
:https://forum.hibernate.org/viewtopic.php?t=973262
如果该自定义生成器适合您,您应该可以通过以下方式使用它:
static mapping = {
id generator:"jpl.hibernate.util.TriggerAssignedIdentityGenerator"
}
答案 1 :(得分:0)
您不能,使用序列支持数据库和自动编号支持数据库时有以下情况:
序列支持
自动编号支持
事实上,Oracle的驱动程序不支持步骤2.2,因此Hibernate无法检索最后分配的ID(因此它可以将其设置为您实体的ID)。