Quando si hanno query parametrizzate nei database (istruzioni preparate), l'assegnazione di valori ai parametri NON DEVE modificare la struttura e il percorso di esecuzione della query (altrimenti i database non li trattano come query parametrizzate e genereranno un'eccezione).
Ecco perché non puoi aver preparato dichiarazioni per query come:
select * from myTable order by ?
select id, f1, ? from myTable
select * from ?
.
perché l'assegnazione di un valore a ciascun parametro cambia il percorso di esecuzione della query (ricorda che la query delle istruzioni preparate viene analizzata una volta e risulta un unico percorso di esecuzione).
Le stesse regole si applicano al parser di query Hibernate, non devi assegnare a un parametro un valore che modifichi la struttura della query.
Assegnazione di una stringa con valori 1, 2, 3
in un parametro SHOULD-TO-BE-A-NUMBER è lo stesso, infatti la prima query verrà tradotta esattamente come update weight_note_receipt set pledge_id =:pledge where wn_id = :wns
ma il secondo sarà tradotto come update weight_note_receipt set pledge_id =:pledge where (wn_id = :x1 or wn_id = :x2 or wn_id = :x3)
, ovviamente query diverse con percorsi di esecuzione diversi.
Quindi, anche se Hibernate non ha generato un'eccezione, il tuo database lo farebbe.