sql >> Databáze >  >> RDS >> Mysql

Hibernace:Nelze provést nativní dotaz hromadné manipulace

Při parametrizovaných dotazech v databázích (připravené příkazy) NESMÍ přiřazení hodnot parametrům měnit strukturu a cestu provádění dotazu (jinak je databáze nepovažují za parametrizované dotazy a vyvolá výjimku).

Proto nemůžete mít připravené výpisy pro dotazy typu:

  • select * from myTable order by ?
  • select id, f1, ? from myTable
  • select * from ? .

protože přiřazení hodnoty každému parametru změní cestu provádění dotazu (pamatujte, že dotaz připravených příkazů je analyzován jednou a výsledkem je jediná cesta provádění).

Stejná pravidla platí pro analyzátor dotazů Hibernate, parametru nesmíte přiřadit hodnotu, která mění strukturu dotazu.

Přiřazení řetězce s hodnotami 1, 2, 3 na parametr SHOULD-TO-BE-A-NUMBER je úplně stejný, ve skutečnosti bude první dotaz přeložen stejně jako update weight_note_receipt set pledge_id =:pledge where wn_id = :wns ale druhý bude přeložen jako update weight_note_receipt set pledge_id =:pledge where (wn_id = :x1 or wn_id = :x2 or wn_id = :x3) , samozřejmě různé dotazy s různými cestami provádění.

Takže i kdyby Hibernate nevyvolal výjimku, vaše databáze ano.



  1. Chybu Nifi PutSQL Timestamp/Datetime error nelze převést

  2. Příklady EXP() v SQL Server

  3. Oracle (11.2.0.1) :Jak identifikovat řádek, který je aktuálně aktualizován příkazem UPDATE

  4. Po odstranění záznamů na SQL Serveru resetujte seed identity