【问题标题】:Hibernate: How does native identifier generation strategy workHibernate:原生标识符生成策略如何工作
【发布时间】:2014-05-28 05:02:54
【问题描述】:

Hibernate 有一个名为native 的标识符生成策略,它根据底层数据库的功能选择identitysequencehilo。我将 MySQL 与 hibernate.hbm2ddl.auto=update 一起使用,它为 id Java 数据类型的 id 属性生成了 id BIGINT(20) NOT NULL AUTO_INCREMENT

我试图了解 Hibernate 在使用 SchemaExport 工具时是如何选择 AUTO_INCREMENT 的。 AUTO_INCREMENT是MySQL默认的主键生成策略吗?

谁能帮我理解一下?

【问题讨论】:

    标签: mysql hibernate primary-key generator native


    【解决方案1】:

    Hibernate 在本地模式下选择密钥生成机制时,将尝试选择数据库中可用的最佳机制。在 MySQL 的情况下,自动递增是可用的,Hibernate 使用它而不是序列,因为自动递增机制稍微好一点,尽管序列也可以正常工作。

    之所以更好,是因为它可以在一个 JDBC 准备语句(例如插入)中执行插入并检索生成的密钥,而无需查询数据库 - 请参阅 here 了解更多详细信息。

    在序列的情况下,Hibernate 必须首先在某个点调用序列,然后使用公式中使用的值或结果来填充插入键,然后发出插入。

    自动增量省去了增加序列所需的数据库的额外往返,这就是 Hibernate 在 MySQL 的情况下更喜欢它的原因。

    【讨论】:

    • 此外,它们可能有很大的不同。考虑对表有一些完整性约束(另一个字段上的唯一键)。使用序列插入时,Hibernate 从序列中获取新值,设置实体的 id,然后尝试将其持久化,然后发生异常,但设置了 id。但是当使用自动编号时,hibernate 会尝试插入,出现异常(违反完整性约束),并且实体不会获得 id。
    猜你喜欢
    • 2012-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-09
    • 2012-04-19
    • 2013-07-20
    • 1970-01-01
    • 2015-10-14
    相关资源
    最近更新 更多