Когато имате параметризирани заявки в бази данни (подготвени оператори), присвояването на стойности на параметрите НЕ ТРЯБВА да променя структурата и пътя на изпълнение на заявката (в противен случай базите данни не ги третират като параметризирани заявки и ще хвърлят изключение).
Ето защо не можете да имате подготвени изрази за заявки като:
select * from myTable order by ?
select id, f1, ? from myTable
select * from ?
.
тъй като присвояването на стойност на всеки параметър променя пътя на изпълнение на заявката (не забравяйте, че заявката на подготвените изрази се анализира веднъж и води до един път на изпълнение).
Същите правила важат за анализатора на заявки за хибернация, не трябва да присвоявате стойност на параметър, която променя структурата на заявката.
Присвояване на низ със стойности 1, 2, 3
към ТРЯБВА-ДА-БЪДЕ-А-ЧИСЛО параметри е точно същото, всъщност първата заявка ще бъде преведена точно както update weight_note_receipt set pledge_id =:pledge where wn_id = :wns
но вторият ще бъде преведен като update weight_note_receipt set pledge_id =:pledge where (wn_id = :x1 or wn_id = :x2 or wn_id = :x3)
, очевидно различни заявки с различни пътища на изпълнение.
Така че дори Hibernate да не хвърли изключение, вашата база данни ще го направи.