春季数据JPA和存在查询

2022-08-31 11:53:56

我正在使用Spring Data JPA(Hibernate作为我的JPA提供程序),并希望定义一个附加了HQL查询的方法:exists

public interface MyEntityRepository extends CrudRepository<MyEntity, String> {

  @Query("select count(e) from MyEntity e where ...")
  public boolean existsIfBlaBla(@Param("id") String id);

}

当我运行此查询时,我得到一个 .java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Boolean

HQL 查询必须是什么样子才能实现此工作?我知道我可以简单地返回一个Long值,然后签入我的Java代码,如果,但这个解决方法应该不是必需的,对吧?count > 0


答案 1

Spring Data JPA 1.11 现在支持存储库查询派生的投影。exists

请参阅此处的文档。

在您的情况下,以下内容将起作用:

public interface MyEntityRepository extends CrudRepository<MyEntity, String> {  
    boolean existsByFoo(String foo);
}

答案 2

我认为您可以简单地将查询更改为返回布尔值

@Query("select count(e)>0 from MyEntity e where ...")

PS:如果您正在检查是否存在基于主键值已经有方法。CrudRepositoryexists(id)


推荐