sql >> Base de Datos >  >> RDS >> Mysql

Hibernate:no se pudo ejecutar la consulta de manipulación masiva nativa

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.