Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Hibernate:não foi possível executar a consulta de manipulação em massa nativa


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.