Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Hibernate:Native Bulk-Manipulation-Abfrage konnte nicht ausgeführt werden

Bei parametrisierten Abfragen in Datenbanken (vorbereitete Anweisungen) DARF die Zuweisung von Werten zu Parametern die Struktur und den Ausführungspfad der Abfrage NICHT ändern (ansonsten behandeln Datenbanken sie nicht als parametrisierte Abfragen und lösen eine Ausnahme aus).

Aus diesem Grund können Sie keine vorbereiteten Anweisungen für Abfragen haben wie:

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

weil das Zuweisen eines Werts zu jedem Parameter den Abfrageausführungspfad ändert (denken Sie daran, dass die Abfrage von vorbereiteten Anweisungen einmal geparst wird und einen einzelnen Ausführungspfad ergibt).

Die gleichen Regeln gelten für den Hibernate-Abfrageparser, Sie dürfen einem Parameter keinen Wert zuweisen, der die Abfragestruktur ändert.

Zuweisen eines Strings mit den Werten 1, 2, 3 zu einer SOLLTE-ZU-ZAHL-Parameter ist genauso, tatsächlich wird die erste Abfrage genauso übersetzt wie update weight_note_receipt set pledge_id =:pledge where wn_id = :wns aber der zweite wird übersetzt als update weight_note_receipt set pledge_id =:pledge where (wn_id = :x1 or wn_id = :x2 or wn_id = :x3) , offensichtlich unterschiedliche Abfragen mit unterschiedlichen Ausführungspfaden.

Selbst wenn Hibernate keine Ausnahme ausgelöst hätte, würde Ihre Datenbank dies tun.