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 (문자열 이름);