Spring Data JPA는 메서드 이름 해결을 사용하여 엔티티를 카운트하는 방법이 있습니까?
스프링 데이터 JPA는 사양을 사용한 엔티티 카운팅을 지원합니다.그러나 메서드 이름 해결을 사용하여 엔티티를 계산하는 방법이 있습니까?예를 들어 내가 방법을 원한다고 합시다.countByName
특정 이름을 가진 실체를 세는 방법처럼findByName
특정 이름을 가진 모든 엔티티를 가져옵니다.
스프링 데이터 1.7.1 기준.릴리스는 두 가지 방법으로 실행할 수 있습니다.
- 새로운 방법으로 쿼리의 개수 및 삭제 모두에 대해 쿼리 파생 기능을 사용합니다.이것을 읽어 주세요(예 5).예,
public interface UserRepository extends CrudRepository<User, Integer> {
long countByName(String name);
}
- 구식 사용법
@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는 QueryBy도 확장합니다.Example Executor.따라서 인터페이스에 커스텀 방식을 정의할 필요도 없습니다.
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));
작업 예
@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);
}
이 기능은 버전 1.4 M1에서 추가되었습니다.
현재 DATAJPA-231이 실장되어 있다고 합니다.
Abel에 따르면 버전 1.4 이후(버전 1.4.3에서 테스트됨)RELEASE)는 다음과 같이 할 수 있습니다.
public long countByName(문자열명);
모두 감사합니다!이제 일이네.DATAJPA-231
카운트를 작성할 수 있으면 좋을 텐데…검색과 같은 방법으로...한 명씩.예:
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();
}
DATAJPA-231 문제에 따르면 이 기능은 아직 구현되지 않았습니다.
저는 몇 주밖에 일하지 않았습니다만, 이것이 엄밀하게는 불가능하다고 생각합니다만, 조금 더 노력하면 같은 효과를 얻을 수 있을 것입니다.질문을 직접 쓰고 메서드명에 주석을 달기만 하면 됩니다.방법을 직접 쓰는 것보다 훨씬 간단하지는 않겠지만, 제 생각에는 더 깔끔합니다.
편집: DATAJPA-231에 따라 가능합니다.
여러 조건에 따라 카운트를 가져오려는 사용자가 있는 경우 여기에 샘플 커스텀 쿼리가 있습니다.
@Query("select count(sl) from SlUrl sl where sl.user =?1 And sl.creationDate between ?2 And ?3")
long countUrlsBetweenDates(User user, Date date1, Date date2);
언급URL : https://stackoverflow.com/questions/10696490/does-spring-data-jpa-have-any-way-to-count-entites-using-method-name-resolving
'sourcecode' 카테고리의 다른 글
Vue j는 하나의 요소에 여러 스타일 속성을 바인딩합니다. (0) | 2022.08.29 |
---|---|
다른 모듈로부터의 변환 커밋 (0) | 2022.08.29 |
자바에서의 &&&의 차이점 (0) | 2022.08.28 |
Java에서의 해시 맵 인쇄 (0) | 2022.08.28 |
vue-cli-service에서 빌드된 Vue 구성 요소를 가져올 수 없음 (0) | 2022.08.28 |