2011-08-19 35 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