Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk Menyelesaikan Ralat "Lajur tidak diketahui 'sequence_name' dalam 'where clause'" Apabila Menggunakan @GeneratedValue GenerationType.TABLE dengan Superclass Abstrak Polimorfik dalam MySQL?

Bagaimana untuk Menyelesaikan Ralat "Lajur tidak diketahui 'sequence_name' dalam 'where clause'" Apabila Menggunakan @GeneratedValue GenerationType.TABLE dengan Superclass Abstrak Polimorfik dalam MySQL?

Barbara Streisand
Barbara Streisandasal
2024-11-11 18:36:02869semak imbas

How to Resolve

@GeneratedValue Polymorphic Abstract Superclass over MySQL

Dalam aplikasi Spring MVC yang menggunakan Hibernate dan MySQL, telah diperhatikan bahawa percubaan untuk mengekalkan subkelas superclass abstrak, BaseEntity , menghadapi ralat "Jadual 'docbd.hibernate_sequences' tidak wujud". Ralat ini timbul daripada penggunaan GenerationType.TABLE untuk @GeneratedValue, dan kekurangan sokongan jujukan dalam MySQL.

Sejak menggunakan GenerationType.IDENTITY tidak berdaya maju kerana ID entiti pengurusan superclass abstrak dan GenerationType.SEQUENCE adalah tidak disokong, ia menimbulkan persoalan bagaimana untuk menyelesaikan masalah ini. Coretan kod yang disediakan menggambarkan superclass abstrak (BaseEntity), contoh subclass (CCD), Domain Specific Language (DDL) dan kod JPQL dalam Data Access Object (DAO).

Strategi pewarisan yang digunakan ialah InheritanceType .TABLE_PER_CLASS, menunjukkan jadual berasingan untuk setiap subkelas. Memandangkan ketidakupayaan MySQL untuk menggunakan jujukan, alternatif menggunakan GenerationType.TABLE tidak dapat dielakkan membawa kepada ketiadaan jadual hibernate_sequences.

Poster menegaskan bahawa menggunakan @MappedSuperClass bukanlah pilihan yang berdaya maju, memetik keperluan untuk hubungan ManyToOne yang boleh ditukar ganti. . Sebagai contoh, AccessLog mengandungi actor_entity dan target_entity, kedua-duanya mewarisi daripada BaseEntity. Dalam senario ini, menggunakan @MappedSuperClass akan mengakibatkan ralat yang menunjukkan bahawa AccessLog tidak dapat mengesan BaseEntity.

Dalam percubaan untuk menyelesaikan isu ini, jadual hibernate_sequences telah dibuat seperti yang dicadangkan. Walau bagaimanapun, ralat baharu muncul: "Lajur 'sequence_name' tidak diketahui dalam 'where clause.'" Ralat ini menunjukkan kepada pertanyaan SQL yang dimulakan oleh Hibernate: "pilih sequence_next_hi_value daripada hibernate_sequences where sequence_name = 'BaseEntity' untuk kemas kini."

Untuk menangani ralat khusus ini, poster memerlukan bantuan dalam menyelesaikan lajur 'sequence_name' yang hilang dalam jadual hibernate_sequences.

Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Ralat "Lajur tidak diketahui 'sequence_name' dalam 'where clause'" Apabila Menggunakan @GeneratedValue GenerationType.TABLE dengan Superclass Abstrak Polimorfik dalam 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