2012-03-16 11 views
2

私は異なるフォーラムから検索していましたが、別の解決策を試しましたが、私の問題の正解をまだ見つけることができません。hibernateはmysqlテーブルの自動インクリメント制約を生成しません

私は自分のエンティティをマッピングするためにhibernate4アノテーションを使用しています。すべて正常に動作しますが、テーブルがmysqlでhibernateを使用して作成されている場合、自動インクリメントキーは検出されません。

iは下記たコード:

@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
@Column(unique = true, nullable = false) 
private int responseId; 

はまた、IDが自動的に行に割り当てられ、絶対にうまく動作Hibernateで

@Id 
@GenericGenerator(name="generator", strategy="increment") 
@GeneratedValue(generator="generator") 
private int responseId; 

を試みた私が、MySQLのテーブルではない自動インクリメント制約がありません。フィールドをAIとして手動でマークする必要があります。これは、テスト用のレコードを手動で挿入するか、テーブルのjdbcステートメントを使用するときに問題になります。 Plzは、休止状態がそれぞれの列にAutoIncrement Contraintを課すのを妨げている設定で何が不足しているかを教えてくれます。

+0

注釈がテーブルを作成するに作るのですか?通常は逆の方法で行います。 – kommradHomer

+0

クラスとリレーションシップを作成し、hibernateプロパティhibernate.hbm2ddl.autoを設定してテーブルを生成します。 – maimoona

答えて

4

はIDENTITYジェネレータを使用し、列の型を指定する@ColumncolumnDefinition属性を使用します。

@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
@Column(columnDefinition = "MEDIUMINT NOT NULL AUTO_INCREMENT") 
private int responseId; 
+0

は働いた!!!!!多くの多くのありがとう...それは私を狂って運転していた.. – maimoona

+1

それをしないでください!他のエンティティが外部キーフィールドよりもレスポンスエンティティへの参照を持っている場合(モデルの逆参照だけでなくdbテーブル内でも)、自動的にインクリメントされます。 – maklemenz

+0

それは私には良いようではありません..参照してくださいhttp://stackoverflow.com/questions/4102449/how-to-annotate-mysql-autoincrement-field-with-jpa-annotations – BrunoJCM

関連する問題