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は変更されません。