Saat memiliki kueri berparameter dalam database (pernyataan yang disiapkan), menetapkan nilai ke parameter TIDAK HARUS mengubah struktur dan jalur eksekusi kueri (jika tidak, database tidak memperlakukannya sebagai kueri berparameter dan akan mengeluarkan pengecualian).
Itu sebabnya Anda tidak dapat menyiapkan pernyataan untuk kueri seperti:
select * from myTable order by ?
select id, f1, ? from myTable
select * from ?
.
karena menetapkan nilai ke setiap parameter mengubah jalur eksekusi kueri (ingat bahwa kueri pernyataan yang disiapkan diurai satu kali dan menghasilkan jalur eksekusi tunggal).
Aturan yang sama berlaku untuk pengurai kueri Hibernasi, Anda tidak boleh menetapkan parameter nilai yang mengubah struktur kueri.
Menetapkan string dengan nilai 1, 2, 3
untuk parameter HARUS-TO-BE-A-NUMBER sama saja, sebenarnya query pertama akan diterjemahkan sama seperti update weight_note_receipt set pledge_id =:pledge where wn_id = :wns
tapi yang kedua akan diterjemahkan sebagai update weight_note_receipt set pledge_id =:pledge where (wn_id = :x1 or wn_id = :x2 or wn_id = :x3)
, kueri yang jelas berbeda dengan jalur eksekusi yang berbeda.
Jadi meskipun Hibernate tidak mengeluarkan pengecualian, database Anda akan melakukannya.