Meloloskan diri dari Operator MySQL Assign (=) dalam Pertanyaan Asli Hibernate
Apabila bekerja dengan pertanyaan asli Hibernate, ralat mungkin akan berlaku semasa menggunakan pengendali tetapkan MySQL (:=) disebabkan oleh ruang yang mengikuti titik bertindih (:). Isu ini amat jelas dalam kes di mana pernyataan subpilihan diperlukan.
Kod yang disediakan menggambarkan ini:
SELECT sub.rownum FROM (SELECT k.news_master_id AS id, @row := @row + 1 AS rownum FROM keyword_news_list k JOIN (SELECT @row := 0) r WHERE k.keyword_news_id = :kid ORDER BY k.news_master_id ASC) AS sub WHERE sub.id = :nid
Melaksanakan pertanyaan ini menggunakan setParameter menghasilkan pengecualian yang menyerlahkan ruang yang salah selepas titik bertindih .
Nasib baik, Hibernate kini menyediakan penyelesaian kepada isu ini. Dalam Hibernate 4.1.3 dan yang lebih baru, anda boleh melarikan diri dari operator tetapkan menggunakan garis miring ke belakang (), seperti yang ditunjukkan di bawah:
SELECT k.news_master_id AS id, @row \:= @row + 1 AS rownum FROM keyword_news_list k JOIN (SELECT @row \:= 0) r WHERE k.keyword_news_id = :kid ORDER BY k.news_master_id ASC
Dengan melarikan diri dari kolon, Hibernate berjaya mentafsir sintaks, membolehkan anda melaksanakan pertanyaan subpilihan dengan berkesan.
Atas ialah kandungan terperinci Bagaimana untuk melarikan diri dari MySQL Assign Operator (:=) dalam Hibernate Native Queries?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!