MySQLのAUTO_INCREMENT
を使用するには 列では、IDENTITY
を使用することになっています 戦略:
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
これは、AUTO
を使用したときに得られるものです MySQLの場合:
@Id @GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
これは実際には
と同等です@Id @GeneratedValue
private Long id;
つまり、マッピングは機能するはずです。ただし、Hibernateはid
を省略する必要があります SQL挿入ステートメントの列ですが、そうではありません。どこかにある種のミスマッチがあるに違いありません。
Hibernate構成でMySQLダイアレクトを指定しましたか(おそらくMySQL5InnoDBDialect
またはMySQL5Dialect
使用しているエンジンによって異なります)?
また、誰がテーブルを作成しましたか?対応するDDLを表示できますか?
フォローアップ: 私はあなたの問題を再現することはできません。 yourのコードを使用する エンティティとあなたの DDL、HibernateはMySQLで次の(予想される)SQLを生成します:
insert
into
Operator
(active, password, username)
values
(?, ?, ?)
id
に注意してください 予想どおり、上記のステートメントには列がありません。
要約すると、コード、テーブル定義、方言は正しく、一貫性があり、機能するはずです。うまくいかない場合は、何かが同期していない(クリーンビルドを実行する、ビルドディレクトリを再確認するなど)か、他の何かが間違っている(疑わしい点がないかログを確認する)可能性があります。
方言については、のみ MySQL5Dialect
の違い またはMySQL5InnoDBDialect
後でENGINE=InnoDB
を追加するということです DDLを生成するときにテーブルオブジェクトに。どちらか一方を使用しても、生成されたSQLは変更されません。