JPA @Query中的'case when exists'与Hibernate不兼容。

5

我有一个@Repository接口,其中包含以下方法,用于检查数据库是否包含与我即将持久化的记录(在业务域的意义上)发生冲突的记录(我不关心冲突的记录是什么):

@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);

我运行的表是空的(PostgreSQL),因此exists子查询不应该找到任何内容,我认为整个方法应该返回false,因为case语句指定只有存在时才能返回true,否则返回false。

但它返回null #facepalm

我的查询在启动时通过了查询语法检查(没有QuerySyntaxException),但执行时会抛出异常:

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

我做错了什么?我应该为我的问题采取其他方法吗?

Hibernate 5.0.11.Final


你确定这是一个Hibernate的问题而不是Spring Data的问题吗?我没有尝试过完全相同的查询,但我很确定我已经让类似的东西工作过了。 - Christian Beikov
1
关于此查询结构的注释。它目前是一个N^2查询。应该将select case ... (select ... from MyEntity ...) ... from MyEntity改为select case ... (select ... from MyEntity ...) ... from dual - tswei
1个回答

7

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接