Als u query's met parameters in databases (voorbereide instructies) hebt, MOET het toewijzen van waarden aan parameters de structuur en het uitvoeringspad van de query NIET wijzigen (anders behandelen databases ze niet als query's met parameters en zullen ze een uitzondering genereren).
Daarom kunt u geen uitspraken hebben voor vragen als:
select * from myTable order by ?
select id, f1, ? from myTable
select * from ?
.
omdat het toewijzen van een waarde aan elke parameter het uitvoeringspad van de query verandert (onthoud dat de query van voorbereide instructies één keer wordt geparseerd en resulteert in een enkel uitvoeringspad).
Dezelfde regels zijn van toepassing op de Hibernate-queryparser, u mag aan een parameter geen waarde toewijzen die de querystructuur verandert.
Een string toewijzen met waarden 1, 2, 3
to a SHOLD-TO-BE-A-NUMBER parameters is precies hetzelfde, in feite zal de eerste query precies hetzelfde worden vertaald als update weight_note_receipt set pledge_id =:pledge where wn_id = :wns
maar de tweede wordt vertaald als update weight_note_receipt set pledge_id =:pledge where (wn_id = :x1 or wn_id = :x2 or wn_id = :x3)
, duidelijk verschillende zoekopdrachten met verschillende uitvoeringspaden.
Dus zelfs als Hibernate geen uitzondering zou genereren, zou je database dat wel doen.