在没有触发器的情况下管理/实现oracle中的自动增量主键

时间:2012-01-10 08:28:45

标签: oracle grails groovy oracle11g auto-increment

我们的数据库中有很多表,自动增量主键ID设置方式与MySQL相同,因为我们正在从MySQL迁移到Oracle。

现在在oracle中,我最近了解到实现这一点需要在每个这样的表的id字段上创建一个序列和一个触发器。我们的架构中有30 -40个表,我们希望避免在我们的产品中使用数据库触发器,因为数据库管理超出了我们的软件设备的范围。

我在oracle中实现自动增量id功能有哪些选择...除了在代码中手动指定id并在代码中管理它,这将改变很多现有的insert语句。

...我想知道是否有办法从grails代码本身做到这一点? (顺便说一下,在域类映射中将id指定为增量的方法不起作用 - 仅适用于mysql)  关于我们的应用程序环境的一些信息:grails-groovy,hibernate,oracle,mysql支持

2 个答案:

答案 0 :(得分:1)

如果你正在使用Grails,hibernate将自动为你处理。

您可以通过将以下内容放在域对象中来指定要使用的序列:

static mapping = {
    id generator:'sequence', params:[sequence:'MY_SEQ']  
} 

答案 1 :(得分:1)

This answer将使Grails / Hibernate自己处理序列生成。它将为主键生成每个表创建一个序列,并且不会缓存任何数字,因此如果缓存超时,您将不会丢失任何标识符。 Grails / Hibernate直接调用序列,因此它也不会使用任何触发器。