2011-08-19 69 views
2

它不是一个真的问题,但让我惊讶:自动增量使用Grails /休眠对于不同DB

,当我使用的Grails与不同势的DB,我得到不同的计数器加...:

  • 与每个表都有自己的计数器,它总是增加1
  • 与oracle数据库,似乎所有表使用相同的全局计数器
  • 现在我正在使用javadb /德比和生成的ID是巨大的!

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

  • HSQL似乎保持计数器小
  • 与Oracle,我得到一个全球唯一的ID - 也是一个不错的功能
  • 但对德比的行为是什么?

回答

3

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

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

+0

Thanx!你的答案的最好部分是详细解释一切的链接! – rdmueller