반응형
Spring Data JPA 저장소 메서드에서 @Query 정의를 사양과 결합할 수 있습니까?
둘 다 사용할 수 있습니까?@Query
주석 및 사양을 하나의 저장소 방법으로 지정할 수 있습니까?예를 들어, 다음과 같은 방법이 있습니다.
@Query(value="SELECT e from EMPLOYEE where firstName <> ?1")
public Page<Employee> findEmployeeBySomethigFancy(String firstName, Pageable pageable, Specification<Employee> emp);
가능한가요? 아니면 전체 질의를 작성해야 하나요?Predicate
그리고 그것을 제거합니다.@Query
주석?
우선, 당신은 이 봄 블로그 게시물을 읽어야 합니다.
둘째, 저장소가 구현해야 하는 인터페이스에 따라 다음 방법이 수행됩니다.Specification
인수:
count(Specification<T> spec)
List<T> findAll(Specification<T> spec)
Page<T> findAll(Specification<T> spec, Pageable pageable)
List<T> findAll(Specification<T> spec, Sort sort)
T findOne(Specification<T> spec)
그래서, 당신은 섞을 수 없습니다.@Query
a를 사용한 정의Specification
.
하지만, 당신이 표현할 수 있기 때문에.firstName <> ?1
를 사용한 조건Specification
그리고 원하는 만큼의 사양을 결합하기 때문에 전체를 다시 작성할 수 있습니다.@Query
사용.Specification
뿐인
제가 가지고 있는 사양을 사용하여 엔티티 유형이 아닌 다른 응답을 얻기 위해 이 해결 방법을 사용했습니다. @Query:
public ImovelFilterResponseDTO getImovelsFilterByCriteria(Specification<Imovel> specification) {
ImovelFilterResponseDTO imovelFilterResponseDTO = new ImovelFilterResponseDTO();
CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery<BigDecimal> query = builder.createQuery(BigDecimal.class);
Root<Imovel> root = query.from(Imovel.class);
Predicate predicate = specification.toPredicate(root, query, builder);
if (predicate != null) {
query.where(predicate);
}
BigDecimal areaHectaresMax = entityManager.createQuery(query.select(builder.max(root.<BigDecimal>get("areaHectares")))).getSingleResult();
imovelFilterResponseDTO.setFilterMaxArea(areaHectaresMax);
return imovelFilterResponseDTO;
}
언급URL : https://stackoverflow.com/questions/26379522/can-i-combine-a-query-definition-with-a-specification-in-a-spring-data-jpa-repo
반응형
'bestsource' 카테고리의 다른 글
오라클 인스턴스가 pfile 또는 spfile을 사용하여 시작되었는지 확인하는 방법은 무엇입니까? (0) | 2023.07.28 |
---|---|
사진 이름을 데이터베이스에서 만든 날짜로 설정하는 것이 사진의 이름을 고유하게 지정하는 가장 좋은 방법입니까? (0) | 2023.07.28 |
Ajax를 사용하여 파일 업로드를 할 수 있습니까? (0) | 2023.07.28 |
하나 이상의 잘못된 서명이 발견되었습니다. (0) | 2023.07.28 |
두께를 변경하려면 어떻게 해야 합니까?두께를 변경하려면 어떻게 해야 합니까?두께를 변경하려면 어떻게 해야 합니까?꼬리표를 달다꼬리표를 달다꼬리표를 달다 (0) | 2023.07.28 |