当我扩展CrudRepository
接口时,我的子接口中有exists(ID)
方法。我可以写findBy<property>
个方法。
是否有可能以某种方式编写将返回existBy<property>
的{{1}}方法。或者使用boolean
对其进行注释,以便它返回@Query(jpa query)
。
我知道我可以boolean
并返回select count(*)
,但我必须{i}}检查我的服务层。
答案 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(...)
方法的查询。