Untuk menggunakan AUTO_INCREMENT
MySQL kolom, Anda seharusnya menggunakan IDENTITY
strategi:
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
Yang akan Anda dapatkan saat menggunakan AUTO
dengan MySQL:
@Id @GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
Yang sebenarnya setara dengan
@Id @GeneratedValue
private Long id;
Dengan kata lain, pemetaan Anda harus berfungsi. Tapi Hibernate harus menghilangkan id
kolom dalam pernyataan penyisipan SQL, dan itu tidak. Pasti ada semacam ketidakcocokan di suatu tempat.
Apakah Anda menentukan dialek MySQL dalam konfigurasi Hibernate Anda (mungkin MySQL5InnoDBDialect
atau MySQL5Dialect
tergantung pada mesin yang Anda gunakan)?
Juga, siapa yang membuat tabel? Bisakah Anda menunjukkan DDL yang sesuai?
Tindak lanjut: Saya tidak dapat mereproduksi masalah Anda. Menggunakan kode Anda entitas dan Anda DDL, Hibernate menghasilkan SQL berikut (yang diharapkan) dengan MySQL:
insert
into
Operator
(active, password, username)
values
(?, ?, ?)
Perhatikan bahwa id
kolom tidak ada dari pernyataan di atas, seperti yang diharapkan.
Singkatnya, kode Anda, definisi tabel, dan dialeknya benar dan koheren, itu harus berfungsi. Jika bukan untuk Anda, mungkin ada sesuatu yang tidak sinkron (lakukan build bersih, periksa kembali direktori build, dll) atau ada yang salah (periksa log apakah ada yang mencurigakan).
Mengenai dialek, hanya perbedaan antara MySQL5Dialect
atau MySQL5InnoDBDialect
adalah bahwa nanti menambahkan ENGINE=InnoDB
ke objek tabel saat membuat DDL. Menggunakan satu atau yang lain tidak mengubah SQL yang dihasilkan.