31

当我扩展CrudRepository接口时,我的子接口中有exists(ID)方法。我可以写findBy<property>方法。

是否有可能以某种方式编写existBy<property>将返回的方法boolean。或对其进行注释,@Query(jpa query)使其返回boolean

我知道我可以做select count(*)并返回long,但是我必须!=0检查我的服务层。

4

4 回答 4

25

@Oleksandr 的回答是正确的,但我可以让它工作的唯一方法如下。我在 PostgreSQL 上使用 Eclipselink。

public interface UserRepository extends JpaRepository<User, Long>
{
    @Query("SELECT CASE WHEN COUNT(u) > 0 THEN 'true' ELSE 'false' END FROM User u WHERE u.username = ?1")
    public Boolean existsByUsername(String username);
}
于 2014-11-26T18:08:51.340 回答
21

实际上,您可以像这样使用 case 表达式:

select case when count(e) > 0 then true else false end from Entity e
where e.property = ?1 -- here go your conditions
于 2012-08-31T18:28:22.547 回答
21

从 Spring Data JPA1.11.0.RELEASE开始,您现在可以使用exists方法名称的查询派生。例如,如果您有一个User具有属性的实体email,您可以这样做:

public interface UserRepository extends JpaRepository<User, Long> {

    boolean existsByEmail(String email);
}
于 2017-04-20T02:50:26.150 回答
2

如果您查看源代码,org.springframework.data.jpa.repository.support.SimpleJpaRepository.exists(ID)您将看到它使用 aTypedQuery来计算记录并返回:

query.getSingleResult() == 1

您可以创建一个对您的existsBy(...)方法执行类似操作的查询。

于 2012-08-29T17:35:16.637 回答