我有一个@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
select case ... (select ... from MyEntity ...) ... from MyEntity
改为select case ... (select ... from MyEntity ...) ... from dual
。 - tswei