带有'case at exists'的JPA @Query不适用于Hibernate

Bar*_*bra 5 java postgresql hibernate jpa hql

我有一个带有以下方法的@Repository接口,用于检查IF数据库是否包含与我即将保留的记录冲突(在业务域意义上)(我不关心碰撞记录是什么):

@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);
Run Code Online (Sandbox Code Playgroud)

关于这一点我运行它是空的(PostgreSQL的)表因此存在子查询应该找不到任何东西,我相信作为整个方法应该返回假的情况下指出,如果存在,否则为false只能返回true.

它返回null #facepalm

我的查询在启动时传递查询语法检查(没有QuerySyntaxException)但在执行时抛出异常:

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

我究竟做错了什么?我应该采取其他方法解决我的问题吗?

Hibernate 5.0.11.Final

Vla*_*cea 6

JPA 2.1 CASE表达式仅支持标量表达式,而不支持查询.

有关更多详细信息,请查看JPA规范.

如果数据库支持此语法,则需要使用本机SQL查询.