Al tener consultas parametrizadas en bases de datos (sentencias preparadas), la asignación de valores a los parámetros NO DEBE cambiar la estructura y la ruta de ejecución de la consulta (de lo contrario, las bases de datos no las tratarán como consultas parametrizadas y generarán una excepción).
Es por eso que no puede tener instrucciones preparadas para consultas como:
seleccione * de myTable ordenar por ?
seleccione id, f1, ? de miTabla
seleccionar * de ?
.
porque asignar un valor a cada parámetro cambia la ruta de ejecución de la consulta (recuerde que la consulta de declaraciones preparadas se analiza una vez y da como resultado una única ruta de ejecución).
Las mismas reglas se aplican al analizador de consultas de Hibernate, no debe asignar a un parámetro un valor que cambie la estructura de la consulta.
Asignando una cadena con valores 1, 2, 3
a un parámetro DEBERÍA SER UN NÚMERO es exactamente lo mismo, de hecho, la primera consulta se traducirá de la misma manera que pero el segundo se traducirá como update weight_note_receipt set promise_id =:pledge where (wn_id =:x1 or wn_id =:x2 or wn_id =:x3)
, obviamente diferentes consultas con diferentes rutas de ejecución.
Entonces, incluso si Hibernate no arrojara una excepción, su base de datos lo haría.