【问题标题】:Autoincrement with Grails/Hibernate for different DBs使用 Grails/Hibernate 为不同的数据库自动增量
【发布时间】:2025-12-12 05:45:01
【问题描述】:

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

当我将 Grails 与不同的数据库一起使用时,我会得到不同的计数器增量...:

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

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

  • hsql 似乎使计数器保持较小
  • 使用 oracle,我获得了一个全局唯一 ID - 这也是一个不错的功能
  • 但是德比的行为呢?

【问题讨论】:

    标签: database hibernate grails


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢!您的答案中最好的部分是详细解释所有内容的链接!