2017-01-04 7 views
0

私は生成された戦略AUTOを持つidカラムを持っていますが、MySqlがhibernate_sequenceテーブルを生成する理由は不思議です。私はあなたが使用している場合は、HibernateのプロパティHibernate_sequenceテーブルが生成されました

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

MySQLのコネクタのバージョン

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

MySQLサーバのバージョンが5.6.12

+0

休止状態でAUTOのフォールバック戦略はSEQUENCEですが、MySQLはシーケンスをサポートしていないため、Hibernateはテーブルを使用してそれらをシミュレートします。戦略をIDENTITYに変更します。 – coladict

答えて

2

ある

<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はIDENTITY ID生成戦略を選ぶだろうと推測しましたstrategy="AUTO"、Hibernateは0123というテーブルを生成しますを入力してIDシーケンスの次の番号を指定します。テーブルのPKにAutoIncrement機能を追加するのを忘れているかもしれません。

生成戦略strategy="IDENTITY"を使用して、MySqlで利用可能なAutoIncrement機能を使用し、テーブルを作成しないようにすることができます。

1

HibernateがAUTO生成タイプを解釈する方法が、Hibernateバージョン5.0から変更されました。

特にMySQLの場合、 AUTOとしてHibernateのV 4.0と世代型を使用して、Hibernateは IDENTITY戦略を選ぶだろう(したがって AUTO_INCREMENT機能を使用)問題のテーブルのIDを生成します。

ジェネレーションタイプがAUTOに設定されているバージョン5.0から、Hibernateはデータベースに関係なくSequenceStyleGeneratorを使用します。 MySqlの場合、Hibernateはテーブルを使用してシーケンスをエミュレートするため、hibernate_sequenceテーブルが表示されます。 MySqlは標準的なシーケンス型をネイティブにサポートしていません。

参照

関連する問題