对于不同的DB,使用Grails / Hibernate自动增量

时间:2011-08-19 19:58:19

标签: database hibernate grails

这不是一个真正的问题,但让我感到惊讶:

当我使用带有不同数据库的Grails时,我得到不同的计数器增量......:

  • 使用ootb hsqldb,每个表都有自己的计数器,总是增加1
  • 使用oracle db,似乎所有表都使用相同的全局计数器
  • 现在我正在使用javadb / derby,生成的id很大!

我在哪里可以找到有关此行为的更多信息以及哪一个最佳?

  • hsql似乎让计数器变小了
  • 使用oracle,我获得了一个全球唯一ID - 也是一个不错的功能
  • 但德比行为怎么样?

1 个答案:

答案 0 :(得分:3)

这实际上取决于特定方言中的默认id generation strategy。 Grails允许您使用mapping closure自定义生成策略。

最安全的(即每个RDBMS都支持)生成策略是TABLE,这是许多JPA实现的首选。这可能是您在HSQLDB中获得的。但是,Oracle支持序列和这些对象通常更好地优化处理密钥生成 - 因此,Oracle的方言似乎使用一个全局序列。我不熟悉Derby,但可能在那里有标识列支持,你得到的是某种UUID。