Ao ter consultas parametrizadas em bancos de dados (declarações preparadas), atribuir valores aos parâmetros NÃO DEVE alterar a estrutura e o caminho de execução da consulta (caso contrário, os bancos de dados não os tratam como consultas parametrizadas e lançarão exceção).
É por isso que você não pode preparar declarações para consultas como:
select * from myTable order by ?
select id, f1, ? from myTable
select * from ?
.
porque atribuir um valor a cada parâmetro altera o caminho de execução da consulta (lembre-se de que a consulta das instruções preparadas é analisada uma vez e resulta em um único caminho de execução).
As mesmas regras se aplicam ao analisador de consulta do Hibernate, você não deve atribuir a um parâmetro um valor que altere a estrutura da consulta.
Atribuindo uma string com valores
1, 2, 3
para um parâmetro SHOULD-TO-BE-A-NUMBER é exatamente o mesmo, na verdade, a primeira consulta será traduzida da mesma forma que update weight_note_receipt set pledge_id =:pledge where wn_id = :wns
mas o segundo será traduzido como update weight_note_receipt set pledge_id =:pledge where (wn_id = :x1 or wn_id = :x2 or wn_id = :x3)
, obviamente diferentes consultas com diferentes caminhos de execução. Portanto, mesmo que o Hibernate não lançasse uma exceção, seu banco de dados o faria.