Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Memperbaiki Kemasukan Medan Auto-Increment Hibernate yang Tidak Dijangka dalam Penyata INSERT MySQL?

Bagaimana untuk Memperbaiki Kemasukan Medan Auto-Increment Hibernate yang Tidak Dijangka dalam Penyata INSERT MySQL?

Patricia Arquette
Patricia Arquetteasal
2024-12-06 16:25:14955semak imbas

How to Fix Hibernate's Unexpected Auto-Increment Field Inclusion in MySQL INSERT Statements?

Menganotasi Medan Autoincrement MySQL dengan Anotasi JPA

Dalam JPA, anotasi @GeneratedValue digunakan untuk menentukan cara nilai sesuatu yang dijana secara automatik lajur hendaklah dijana. Untuk MySQL, lajur kenaikan automatik biasanya dipetakan dengan strategi GenerationType.IDENTITY. Walau bagaimanapun, jika SQL yang dijana termasuk medan autokenaikan, mungkin terdapat ketidakpadanan konfigurasi.

Dalam kes yang diberikan, objek Operator mempunyai medan autokenaikan berikut:

@Id
@GeneratedValue
private Long id;

Anotasi ini harus menghasilkan SQL berikut:

insert 
into
    Operator
    (active, password, username) 
values
    (?, ?, ?)

Walau bagaimanapun, log yang disediakan menunjukkan bahawa SQL termasuk id lajur:

Hibernate: insert into Operator (active, password, username, id) values (?, ?, ?, ?)

Untuk menyelesaikannya, pastikan langkah berikut diikuti:

  1. Nyatakan Dialek MySQL: Dalam konfigurasi Hibernate, tentukan Dialek MySQL, seperti MySQL5InnoDBDialect atau MySQL5Dialect.
  2. Semak Jadual Definisi: Sahkan bahawa jadual berkenaan mempunyai lajur kenaikan automatik yang ditakrifkan, seperti dalam DDL yang disediakan:
CREATE TABLE `operator` ( 
`id` INT(10) NOT NULL AUTO_INCREMENT,
...
  1. Semak Kod: Semak semula entiti Operator dan pastikan ia dianotasi dengan betul @GeneratedValue.
  2. Bersihkan Binaan dan Nyahpepijat: Lakukan binaan bersih dan semak direktori binaan untuk sebarang percanggahan. Selain itu, periksa log untuk sebarang aktiviti yang mencurigakan.

Jika isu itu berterusan, mungkin perlu untuk menyatakan secara eksplisit strategi penjanaan identiti:

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;

Atas ialah kandungan terperinci Bagaimana untuk Memperbaiki Kemasukan Medan Auto-Increment Hibernate yang Tidak Dijangka dalam Penyata INSERT MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn