Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Hibernacja:nie można wykonać natywnego zapytania do manipulacji zbiorczej

Mając zapytania parametryczne w bazach danych (przygotowane instrukcje), przypisywanie wartości parametrom NIE MOŻE zmieniać struktury i ścieżki wykonania zapytania (w przeciwnym razie bazy danych nie traktują ich jako zapytań parametrycznych i zgłoszą wyjątek).

Dlatego nie możesz mieć przygotowanych wyciągów dla zapytań takich jak:

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

ponieważ przypisanie wartości do każdego parametru zmienia ścieżkę wykonania zapytania (pamiętaj, że zapytanie przygotowanych instrukcji jest jednorazowo parsowane i daje w wyniku pojedynczą ścieżkę wykonania).

Te same zasady dotyczą parsera zapytań Hibernate, nie należy przypisywać parametrowi wartości, która zmienia strukturę zapytania.

Przypisanie ciągu z wartościami 1, 2, 3 na parametr POWINNO BYĆ-LICZBA jest taki sam, w rzeczywistości pierwsze zapytanie zostanie przetłumaczone tak samo jak update weight_note_receipt set pledge_id =:pledge where wn_id = :wns ale drugi zostanie przetłumaczony jako update weight_note_receipt set pledge_id =:pledge where (wn_id = :x1 or wn_id = :x2 or wn_id = :x3) , oczywiście różne zapytania z różnymi ścieżkami wykonania.

Więc nawet jeśli Hibernate nie zgłosi wyjątku, Twoja baza danych to zrobi.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nieprawidłowy format daty i godziny:1292 Nieprawidłowa wartość daty i godziny

  2. Problem z połączeniem MySQL Hibernate podczas korzystania z c3p0

  3. Konwertuj znacznik czasu na datę w zapytaniu MySQL

  4. Spring boot JPA:Użyj biblioteki do zbiorczego ładowania danych dla MySQL

  5. MySQL — Base64 kontra BLOB