@GeneratedValue Polymorphic Abstract Superclass Over MySQL
Dalam aplikasi Spring MVC menggunakan Hibernate dan MySQL, anda mungkin menghadapi masalah apabila menggunakan @GeneratedValue pada superclass abstrak dengan subkelas yang memanjangkannya. Berikut ialah pandangan yang lebih dekat pada masalah dan penyelesaiannya.
Masalah
Apabila menyimpan subkelas bagi BaseEntity superclass abstrak dalam MySQL, anda mungkin menerima ralat mengenai bukan- kewujudan jadual hibernate_sequences. Ini berlaku kerana MySQL tidak menyokong jujukan, dan GenerationType.TABLE (nilai lalai untuk @GeneratedValue) memerlukan penggunaan jujukan.
Penyelesaian
Untuk mengatasinya isu, anda perlu mencipta jadual yang dipanggil hibernate_sequences dalam MySQL, seperti yang dicadangkan oleh JBNizet dalam suntingan kedua asal soalan. Walau bagaimanapun, walaupun selepas membuat jadual, anda mungkin menghadapi ralat lain: "Lajur tidak diketahui 'sequence_name' dalam 'where clause'".
Untuk menyelesaikannya, ubah suai penyataan SELECT yang dijana oleh Hibernate untuk menentukan sequence_name dengan betul:
Hibernate: select sequence_next_hi_value from hibernate_sequences where sequence_name = 'BaseEntity' for update
Tukar pernyataan kepada:
Hibernate: select sequence_next_hi_value from hibernate_sequences where sequence_names = 'BASE_ENTITY' for update
Pastikan nama jujukan ditulis dengan huruf besar dalam pernyataan SELECT, yang sepatutnya sepadan dengan nama jujukan yang anda tentukan semasa pembuatan jadual (buat jadual ... pernyataan).
Setelah nama jujukan betul, Hibernate SQL akan berfungsi dengan lancar, membolehkan anda untuk simpan subkelas BaseEntity tanpa menghadapi ralat "nama_jujukan'" lajur tidak diketahui.
Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Ralat 'Lajur tidak diketahui 'sequence_name'' Apabila Menggunakan @GeneratedValue pada Superclass Abstrak Polimorfik dengan MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!