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.