sql >> Databasteknik >  >> RDS >> Mysql

Hibernate:kunde inte köra inbyggd massmanipuleringsfråga

När du har parametriserade frågor i databaser (förberedda satser), FÅR tilldelning av värden till parametrar INTE ändra strukturen och exekveringsvägen för frågan (annars behandlar databaser dem inte som parametriserade frågor och kommer att skapa undantag).

Det är därför du inte kan ha förberedda uttalanden för frågor som:

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

eftersom att tilldela ett värde till varje parameter ändrar sökvägen för exekveringen (kom ihåg att förberedda satsers fråga analyseras en gång och resulterar i en enda exekveringsväg).

Samma regler gäller för Hibernate-frågeparser, du ska inte tilldela en parameter ett värde som ändrar frågestrukturen.

Tilldela en sträng med värdena 1, 2, 3 till ett SHOULD-TO-BE-A-NUMBER är parametrarna precis samma, i själva verket kommer den första frågan att översättas precis som update weight_note_receipt set pledge_id =:pledge where wn_id = :wns men den andra kommer att översättas som update weight_note_receipt set pledge_id =:pledge where (wn_id = :x1 or wn_id = :x2 or wn_id = :x3) , uppenbarligen olika frågor med olika körningsvägar.

Så även om Hibernate inte gjorde ett undantag, så skulle din databas göra det.



  1. Ställa in ODBC-anslutningsattribut utan att behöva skriva kod

  2. Databasmodeller för e-handel Del 1:Nyhetsbrevet

  3. Hur man bibehåller ordningen för insättning i SQL Server

  4. Hur skapar jag en dynamisk URL i php?