[REDIS] 어떻게 봄 데이터 레디 스 저장소와 동적 쿼리를 구축?
REDIS어떻게 봄 데이터 레디 스 저장소와 동적 쿼리를 구축?
이 같은 저장소를 사용하여 봄 - 데이터 - 레디 스와 레디 스를 테스트하고 있습니다 :
public interface CreditCardRepository extends CrudRepository<CreditCard, String>{
List<CreditCard> findByIssuer(String issuer);
List<CreditCard> findByCreditNetwork(String creditNetwork);
List<CreditCard> findByCreditNetworkAndIssuer(String creditNetwork, String issuer);
}
위의 방법은 레디 스 구조 등을 통해 쿼리합니다 :
creditcard:creditNetwork:mastercard
creditcard:creditNetwork:visa
creditcard:issuer:company1
creditcard:issuer:company2
지금 내 크레딧 카드 객체는 그래서 같은 객체를 검색 할 쉽게, 두 가지 속성 (발행, 네트워크 및 ID를) 포함
private List<CreditCard> searchCardFromCache(CreditCardGetReq req) {
if (req.getIssuer() != null && req.getNetwork() != null) {
return ccRepository.findByIssuerAndCreditNetwork(req.getIssuer(), req.getNetwork().name());
}
if (req.getIssuer() != null) {
return ccRepository.findByIssuer(req.getIssuer());
}
if (req.getNetwork() != null) {
return ccRepository.findByCreditNetwork(req.getNetwork().name());
}
return null;
}
나는 모든 속성의 조합을 만들어야합니다 매우 지저분한 것 때문에,이 코드 좋아하지 않는다. '만약'체인 수없는, 그래서 앞으로 나는 15 개 특성을 가지고 계획이다.
레디 스 각 속성을 확인보다 더 나은 방법으로 개체 속성에 따라 교차로를 반환 할 수 있도록 내가 봄 - 데이터 - 레디 스를 사용하여 동적 쿼리를 만들 수있는 방법을 부탁드립니다?
이와 같이 생성 된 동적 될 메소드 이름 (내가 이전 저장소 findByIssuerAndCreditNetwork에서 삭제) 하드 코딩에 의해 MethodHandle를 사용하여 시도했다 :
MethodType methodType = MethodType.methodType(cardList.getClass(), String.class, String.class);
// Dynamic create 'findByIssuerAndCreditNetwork'
MethodHandle methodHandle = MethodHandles.lookup().findVirtual(CreditCardRepository.class, "findByIssuerAndCreditNetwork", methodType);
하지만 오류가 아래에있어 이후 MethodHandle 작동하지 않는 것 같습니다 :
해결법
-
==============================
1.현재, 동적 쿼리를 생성 할 지원이 없습니다. 그것은 조금 소리 예에 의한 질의 당신이 찾고있는 일이 될 수있는 것처럼. 봄 데이터 MongoDB를하고 스프링 데이터 JPA는 이미 예에 의해 쿼리를 구현한다.
현재, 동적 쿼리를 생성 할 지원이 없습니다. 그것은 조금 소리 예에 의한 질의 당신이 찾고있는 일이 될 수있는 것처럼. 봄 데이터 MongoDB를하고 스프링 데이터 JPA는 이미 예에 의해 쿼리를 구현한다.
쿼리는 예를 들어 도메인 객체에 맞게 데이터 저장소 모듈에 의해 생성된다 :
Person person = new Person(); person.setFirstname("Dave"); Example<Person> example = Example.of(person); MongoRepository repo = … List<Person> result = repo.findAll(example); // returns all objects that with Dave in firstname
예에 의한 쿼리 지금 봄 데이터 레디 스를 지원하지 않습니다하지만 기본적인 지원을 제공 할 수 있어야한다.
나는이 기능의 진행 상황을 추적 티켓 DATAREDIS-605을 만들었습니다.
from https://stackoverflow.com/questions/42518900/how-to-build-dynamic-queries-with-spring-data-redis-repositories by cc-by-sa and MIT license
'REDIS' 카테고리의 다른 글
[REDIS] 레디 스 연결 풀 + Node.js를 (0) | 2020.01.20 |
---|---|
[REDIS] 레디 스는 : 정렬과 이웃 키 N를 얻을 수 (0) | 2020.01.20 |
[REDIS] 웹 서비스 아키텍처 : 레디 스 (캐시 등) 및 지속성에 대한 PostgreSQL을 (0) | 2020.01.20 |
[REDIS] 로드하지 않고 루비 resque 환경 레일 (0) | 2020.01.20 |
[REDIS] 어떻게 레디 스 클러스터의 패턴과 일치하는 삭제 키 (0) | 2020.01.20 |