Při parametrizovaných dotazech v databázích (připravené příkazy) NESMÍ přiřazení hodnot parametrům měnit strukturu a cestu provádění dotazu (jinak je databáze nepovažují za parametrizované dotazy a vyvolá výjimku).
Proto nemůžete mít připravené výpisy pro dotazy typu:
select * from myTable order by ?
select id, f1, ? from myTable
select * from ?
.
protože přiřazení hodnoty každému parametru změní cestu provádění dotazu (pamatujte, že dotaz připravených příkazů je analyzován jednou a výsledkem je jediná cesta provádění).
Stejná pravidla platí pro analyzátor dotazů Hibernate, parametru nesmíte přiřadit hodnotu, která mění strukturu dotazu.
Přiřazení řetězce s hodnotami 1, 2, 3
na parametr SHOULD-TO-BE-A-NUMBER je úplně stejný, ve skutečnosti bude první dotaz přeložen stejně jako update weight_note_receipt set pledge_id =:pledge where wn_id = :wns
ale druhý bude přeložen jako update weight_note_receipt set pledge_id =:pledge where (wn_id = :x1 or wn_id = :x2 or wn_id = :x3)
, samozřejmě různé dotazy s různými cestami provádění.
Takže i kdyby Hibernate nevyvolal výjimku, vaše databáze ano.