Nie otrzymawszy żadnych informacji zwrotnych w postaci odpowiedzi ani nawet komentarza, szykowałem się do rezygnacji, kiedy natknąłem się na ten doskonały wpis na blogu:
Jak powiązać niestandardowe typy parametrów Hibernate z zapytaniami JPA
Post daje dwie opcje kontrolowania typów, które JPA przekazuje przez sterownik do Postgresa (lub czymkolwiek jest bazowa baza danych). Poszedłem z podejściem za pomocą TypedParameterValue
. Oto jak wygląda mój kod, kontynuując przykład podany powyżej:
Query query = entityManager.createNativeQuery(sqlString, MyEntity.class);
query.setParameter("param1", new TypedParameterValue(StringType.INSTANCE, null));
query.setParameter("param2", new TypedParameterValue(DoubleType.INSTANCE, null));
List<MyEntity> = query.getResultList();
Oczywiście trywialne jest przekazanie null
dla każdego parametr w zapytaniu, ale robię to głównie po to, aby pokazać składnię dla tekstu i podwójnych kolumn. W praktyce spodziewalibyśmy się, że przynajmniej kilka parametrów nie będzie null
, ale powyższa składnia obsługuje wszystkie wartości, null lub inne.