[java] SpringData JPA에는 메서드 이름 확인을 사용하여 엔터티를 계산하는 방법이 있습니까?

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


답변

분명히 지금 구현되어 있습니다 DATAJPA-231