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.