내 애플리케이션에서 스프링 데이터 및 JPA를 사용하고 있으며 동적 기준 API를 위해 QueryDSL을 구현하려고합니다. 내가 기준에 특정 값을 보내는 것처럼 지금까지,이 조건 이하로 사용하여 잘 작동 :QueryDSL 및 스프링 데이터에서 동적 필터 맵을 사용하여 쿼리 생성 JPA
Predicate predicate = QProductInfo.productInfo.shopName.eq(shopName).and(QProductInfo.productInfo.productType.eq(productType));
을하지만 여러 필터 매개 변수를 받고의 키 - 값 쌍을 저장하기 위해지도를 사용하려는 경우 (COLUMN_NAME - COLUMN_VALUE) 동적으로 쿼리를 파생시키기 위해 동일한 쿼리를 만들 수 없습니다. 술어에 조건 연산자 및/또는 다른 연산자를 추가 할 수 있다는 것을 의미하지만 사용해야하는 표현의 수는 런타임에만 결정되므로 올바른 표현식을 만드는 방법을 알 수는 없습니다. 여기
일부 코드 정보 지금@Entity
Public class ProductInfo{
productId;
title;
vendor;
code;
.... and more
}
필터 (1) = PRODUCT_ID = 123, 표제 = 시험 필터 2 = 표제 = XYZ 코드 = ABC 같은 값으로 1 내지 N의 필드에서 다를 수 필터 인 , vendor = pqr
지도를 사용하여 키 - 값 쌍 (title-xyz 등)을 저장하고 쿼리를 동적으로 구성하려고합니다.
많은 지침서를 읽었지만 지금까지는 내 조건에 맞는 적절한 해결책을 찾을 수 없었습니다. 나는 스위치를 사용하여지도의 루프를 반복하는 동안 생각했다. 그러나 모든 표현식/술어를 묶는 방법에 대해서는 전혀 모른다.
해결 방법을 찾지 못하면 아마도 JPA Criteria API를 사용하여 List of Predicates를 쉽게 사용할 수 있습니다. 도움이 필요한 정보가 있으면 알려주십시오.
감사
술어를 구현하는 BooleanBuilder를 사용할 수 있습니다. http://www.querydsl.com/static/querydsl/3.6.3/apidocs/com/mysema/query/BooleanBuilder.html. 매개 변수가 Spring 웹 응용 프로그램에서 오는 경우 Predicate를 자동으로 생성 할 수도 있습니다. https://spring.io/blog/2015/09/04/what-s-new-in-spring-data-release-gosling # querydsl-web-support –
감사합니다. 앨런. 나는 BooleanBuilder를보다 효율적으로 사용하려고 노력할 것이다. 비록 내가 여전히 실행 시간에 객체 속성을 설정하는 방법을 의심하고 있지만, 키와 값 모두가 실행 시간이 오면 키를 qproductInfo.ProductInfo로 사용하는 방법을 의미합니다. .eq (map value); 나는 그것을 시도하고 있으며 논평 할 것이다. –
yateen