Korzystam z JPA / HIBERNATE, PostgreSQL oraz Springa. Próbuję użyć wyrażenia COALESCE w swoich zapytaniach w sposób podobny do poniższego przykładu:
@Query("SELECT s FROM com.entity.SomeEntity s WHERE s.price >= COALESCE(:price, 0)")
Page<SomeEntity> findEntities(@Param("price") Integer price, Pageable pageable);
W momencie kiedy wartość przekazana w parametrze price jest różna od null wszystko jest ok. W przeciwnym przypadku dostaję wyjątek:
org.postgresql.util.PSQLException: BŁĄD: COALESCE typy bytea i integer nie mogą być dopasowane
Próbowałem pierwszy parametr zrzutować na typ INTEGER:
@Query("SELECT s FROM com.entity.SomeEntity s WHERE s.price >= COALESCE(CAST (:price AS INTEGER), 0)")
Page<SomeEntity> findEntities(@Param("price") Integer price, Pageable pageable);
Jednak wtedy dostaje inny wyjątek:
java.lang.IllegalArgumentException: org.hibernate.QueryException: Could not resolve requested type for CAST : INTEGER [tu moje zapytanie]
Da się to jakos obejść? Dodam, że z pewnych względów zależy mi na tym COALESCE i obejście problemu na zasadzie "zamiast NULLa przekażę do repozytorium wartość 0" nie wchodzi w grę.