生成Hibernate_sequence表

时间:2017-01-04 10:14:18

标签: java mysql hibernate

我有生成策略的id列AUTO,我想知道,为什么MySql会生成hibernate_sequence表?我认为hibernate会选择IDENTITY id生成策略

<mapped-superclass class="com.cl.xlp.model.data.Identity">
    <attributes>
        <id name="id">
            <column name="id" />
            <generated-value strategy="AUTO" />
        </id>
    </attributes>
</mapped-superclass>

Hibernate属性

hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
hibernate.hbm2ddl.auto=update

Mysql连接器版本

version.mysql.connector>5.1.39</version.mysql.connector>

Mysql服务器版本是5.6.12

2 个答案:

答案 0 :(得分:23)

Hibernate解释AUTO生成类型的方式已从Hibernate 5.0版开始改变。

当使用Hibernate v 4.0和Generation Type作为AUTO时,特别是对于MySql,Hibernate会选择IDENTITY策略(因此使用AUTO_INCREMENT功能)来为表生成ID问题。

从版本5.0开始,当Generation Type被选为AUTO时,无论数据库如何,Hibernate都使用SequenceStyleGenerator。在MySql的情况下,Hibernate使用表模拟一个序列,这就是你看到hibernate_sequence表的原因。 MySql本身并不支持标准序列类型。

参考

答案 1 :(得分:9)

如果您使用strategy="AUTO",Hibernate将生成一个名为hibernate_sequence的表,以提供ID序列的下一个数字。您可能忘记将AutoIncrement功能添加到表格的PK中。

您可以使用生成策略strategy="IDENTITY"来强制使用MySql中提供的AutoIncrement功能,并避免创建表。