2016-11-27 52 views
5

Mam interfejs @Repository z następującą metodą sprawdzania, czy baza danych zawiera kolizyjny rekord (w znaczeniu domeny biznesowej) z tym Mam zamiar utrzymują się (ja nie dbam o to, co zapisy kolidujące są):JPA @Query z "przypadkiem, gdy istnieje" nie działa z Hibernate

@Query("select case when exists (
      select me from MyEntity me where {my conditions regarding someParam here} 
     ) then true else false end from MyEntity") 
boolean findColliding(@Param("someParam") String someParam); 

tabeli na której prowadzony jest pusta (PostgreSQL) dlatego istnieje podzapytanie nie powinien znaleźć coś i wierzę, że cała metoda powinna zwracać wartość false, ponieważ case stwierdza, że ​​może zwracać tylko wartość true, jeśli istnieje, a false w przeciwnym wypadku.

zwraca NULL #facepalm

Moje zapytanie przechodzi sprawdzanie składni zapytań przy starcie (bez QuerySyntaxException), ale rzuca wyjątek, gdy wykonywane:

org.springframework.aop.AopInvocationException: Null return value from advice does not match primitive return type for: public abstract boolean findColliding(...) 

Co robię źle? Czy powinienem przyjąć inne podejście do mojego problemu?

Hibernate 5.0.11.Final

+0

Czy na pewno jest to problem hibernacji, a nie problem z danymi sprężyny? Nie próbowałem dokładnie tego zapytania, ale jestem pewien, że już coś takiego działa. –

Odpowiedz