program tip

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

radiobox 2020. 8. 9. 10:17
반응형

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")
int countByAreaCode(String code);

이 기능은 버전 1.4 M1에 추가되었습니다.


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

Abel에 따르면 버전 1.4 이후 (버전 1.4.3.RELEASE에서 테스트 됨)는 다음과 같이 가능합니다.

public long countByName (문자열 이름);


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


작업 예

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

DATAJPA-231 문제에 따르면 이 기능은 아직 구현되지 않았습니다.


모두 감사합니다! 이제 작동합니다. DATAJPA-231

count… By… 메소드를 find… By ones와 같이 생성 할 수 있다면 좋을 것입니다. 예:

public interface UserRepository extends JpaRepository<User, Long> {

   public Long /*or BigInteger */ countByActiveTrue();
}

@Autowired
private UserRepository userRepository;

@RequestMapping("/user/count")
private Long getNumberOfUsers(){
    return userRepository.count();
}

I have only been working with it for a few weeks but I don't believe that this is strictly possible however you should be able to get the same effect with a little more effort; just write the query yourself and annotate the method name. It's probably not much simpler than writing the method yourself but it is cleaner in my opinion.

참고URL : https://stackoverflow.com/questions/10696490/does-spring-data-jpa-have-any-way-to-count-entites-using-method-name-resolving

반응형