SpringData JPA 는 사양을 사용하여 엔티티 계산을 지원합니다. 그러나 메서드 이름 확인을 사용하여 엔터티를 계산하는 방법이 있습니까? countByName
특정 이름을 findByName
가진 모든 항목을 가져 오는 방법처럼 특정 이름을 가진 항목을 계산 하는 방법 을 원한다고 가정 해 보겠습니다 .
답변
현재 봄 데이터 1.7.1.RELEASE 당신은 두 가지 방법으로 할 수 있습니다,
1) 쿼리 개수 및 삭제 쿼리 모두에 쿼리 파생을 사용 하는 새로운 방법 . 이것을 읽으십시오 (예제 5). 예,
public interface UserRepository extends CrudRepository<User, Integer> {
Long countByName(String name);
}
2) 이전 방식 , @Query 주석 사용.
예,
public interface UserRepository extends CrudRepository<User, Integer> {
@Query("SELECT COUNT(u) FROM User u WHERE u.name=?1")
Long aMethodNameOrSomething(String name);
}
또는 @Param 주석을 사용하여
public interface UserRepository extends CrudRepository<User, Integer> {
@Query("SELECT COUNT(u) FROM User u WHERE u.name=:name")
Long aMethodNameOrSomething(@Param("name") String name);
}
또한 확인 이 너무 대답을 .
답변
1.4 버전을 사용하지 않는 한 명시 적 주석을 사용할 수 있습니다.
예:
@Query("select count(e) from Product e where e.area.code = ?1")
long countByAreaCode(String code);
답변
JpaRepository는 QueryByExampleExecutor도 확장합니다. 따라서 인터페이스에서 사용자 지정 메서드를 정의 할 필요도 없습니다.
public interface UserRepository extends JpaRepository<User, Long> {
// no need of custom method
}
그리고 다음과 같이 쿼리합니다.
User probe = new User();
u.setName = "John";
long count = repo.count(Example.of(probe));
답변
이 기능은 버전 1.4 M1에 추가되었습니다.
답변
작업 예
@Repository
public interface TenantRepository extends JpaRepository< Tenant, Long > {
List<Tenant>findByTenantName(String tenantName,Pageable pageRequest);
long countByTenantName(String tenantName);
}
DAO 레이어에서 호출
@Override
public long countByTenantName(String tenantName) {
return repository.countByTenantName(tenantName);
}
답변
Abel에 따르면 버전 1.4 이후 (버전 1.4.3.RELEASE에서 테스트 됨)는 다음과 같이 가능합니다.
public long countByName (문자열 이름);