2014-07-09 5 views
15

Spring-data JPA에서, 어쨌든 ??처럼 검색하는 메소드 질의를 생성 할 수 있습니까 ??SpringData JPA 리포지토리 메소드 쿼리와 비슷합니까?

나는 다음과 같은 방법 쿼리

public MakeModel findByModelIgnoreCase(String model); 

내가 정말 원하는 것은 같은 표현이있다. 기준 또는 @Query 주석을 작성해야합니까? 너무 많이 묻는거야?

//Stupid example of what I want to be able to do 

    public MakeModel findByFuzzyModelIgnoreCase(String model); 

정말로 내가 생각하기에 테이블 검색을하고 싶습니다. Spring 데이터 아래에서 Hibernate를 사용하고 있으므로 Hibernate Search와 같은 검색 API를 사용할 수 있다고 생각합니다. 나는 이곳의 권고에 대해 개방적이다.

+0

JPQL은 다음과 같습니다. https://blogs.oracle.com/JPQL01/entry/how_to_use_like_expression –

+1

http://docs.spring.io/spring-data/jpa/docs/1.6.1.RELEASE/reference/ html/jpa.repositories.html # jpa.query-methods.query-creation – axtavt

+0

axtavt 정확히 내가 필요로하는 것입니다 ... – chrislhardin

답변

20

처럼도 지원됩니다 는 엄격한 시작 일치 에서 동일하게 중요하지 않습니다 말을 시작으로 "%" 추가 : 전화

MakeModel findByModelLikeIgnoreCase(String model); 

이 방법은 follwing을 사용 끝, 또는 당신은 그들 중 하나를 사용할 수 있습니다 그것은 당신이 원하는대로 달려 있습니다.

MakeModel makeModel = findByModelLikeIgnoreCase("%"+model+"%"); 

당신의 메이크업 모델 test인가와 비교하는 캐릭터 라인은 다음 "%"+model+"%" 경우 : 당신이하지 않으면

te is a match , es is not . 
+4

좋은 답변입니다! 당신은 같은 것을하는'Containing' /'Contains' 키워드에 대해서 언급하고 싶지만 클라이언트가 특정 상점에 대한 비슷한 문법을 ​​인식 할 필요는 없습니다. –

23

:

es is a match , T is a match , test is a match 

에 비교하는 문자열 model+"%"입니다 "%"수동으로 추가하려면 다음 쿼리 방법을 사용할 수 있습니다.

MakeModel findByModelStartingWithIgnoreCase(String model); //SQL => LIKE 'model%' 
MakeModel findByModelEndingWithIgnoreCase(String model); //SQL => LIKE '%model' 
MakeModel findByModelContainingIgnoreCase(String model); //SQL => LIKE '%model%' 
+0

작은 세부 사항, IgnoreCase => ILIKE – dwana

관련 문제