存在Spring数据CrudRepository

时间:2012-08-29 16:50:29

标签: spring spring-data spring-data-jpa

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

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

我知道我可以boolean并返回select count(*),但我必须{i}}检查我的服务层。

4 个答案:

答案 0 :(得分:22)

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

答案 1 :(得分:20)

实际上你可以使用这样的案例表达式:

select case when count(e) > 0 then true else false end from Entity e
where e.property = ?1 -- here go your conditions

答案 2 :(得分:11)

从Spring Data JPA 1.11.0.RELEASE开始,您现在可以使用exists从方法名称中进行查询派生。例如,如果您的User实体具有email属性,则可以执行以下操作:

public interface UserRepository extends JpaRepository<User, Long> {

    boolean existsByEmail(String email);
}

答案 3 :(得分:2)

如果您查看org.springframework.data.jpa.repository.support.SimpleJpaRepository.exists(ID)的来源,那么您会看到它使用TypedQuery来计算记录并返回:

query.getSingleResult() == 1

您可以创建一个类似于existsBy(...)方法的查询。