让Oracle触发ID序列而不是Hibernate?
我有一个应用程序,它有一个Oracle数据库,其中每个表都有一个触发器,该触发器调用一个序列来获取该行的下一个ID。如何配置域,使Hibernate不指定插入的下一个ID,而只让Oracle和触发器处理它让Oracle触发ID序列而不是Hibernate?,hibernate,grails,Hibernate,Grails,我有一个应用程序,它有一个Oracle数据库,其中每个表都有一个触发器,该触发器调用一个序列来获取该行的下一个ID。如何配置域,使Hibernate不指定插入的下一个ID,而只让Oracle和触发器处理它 以前,我的域设置为使用序列生成器,这似乎是可行的。我不能在我们的生产系统上使用它,因为DBA不允许我为Grails序列授予select特权。这显然破坏了Hibernate的生成器。您不能,当使用序列支持数据库和自动编号支持数据库时,会出现以下情况: 序列支持 Hibernate获取序列的下一个
以前,我的域设置为使用序列生成器,这似乎是可行的。我不能在我们的生产系统上使用它,因为DBA不允许我为Grails序列授予select特权。这显然破坏了Hibernate的生成器。您不能,当使用序列支持数据库和自动编号支持数据库时,会出现以下情况:
事实上,Oracle的驱动程序不支持步骤2.2,因此Hibernate无法检索最后分配的ID(因此它可以在实体的ID中设置它)。您不能,当使用序列支持数据库和自动编号支持数据库时,会出现以下情况:
事实上,Oracle的驱动程序不支持步骤2.2,因此Hibernate无法检索最后分配的ID(因此它可以在实体的ID中设置它)。有一个Hibernate论坛主题,它讨论了一个自定义生成器,它使用JDBC插入中的
生成键来检索ID
:
如果该自定义生成器适用于您,您应该能够通过以下方式使用它:
static mapping = {
id generator:"jpl.hibernate.util.TriggerAssignedIdentityGenerator"
}
有一个Hibernate论坛主题,它讨论了一个自定义生成器,它使用JDBC插件中的generatedKeys
检索id
:
如果该自定义生成器适用于您,您应该能够通过以下方式使用它:
static mapping = {
id generator:"jpl.hibernate.util.TriggerAssignedIdentityGenerator"
}
我将提到使用Hi-Lo键生成器更好,因为hibernate查询数据库的次数更少。我将提到使用Hi-Lo键生成器更好,因为hibernate查询数据库的次数更少。