2014-07-14 3 views
0

요구 사항 : 한 문자열의 내용이 다른 문자열의 내용에 있습니다. 이 테스트는 전체 단어에만 적용되지만 여러 단어로 구성된 쿼리가 허용됩니다. 예를 들어 givenName:Jane의 검색어는 givenName 값이 'Jane'및 'Jane Ann'이지만 사용자는 'Janet'이 아닌 사용자와 일치합니다. givenName:Mary Ann에 대한 복수 단어 쿼리는 "Mary Ann Evans"및 "Sarah Mary Ann"의 값과 일치하지만 "Ann Mary"는 일치하지 않습니다.이 JPQL 요구 사항을 충족하십시오.

이것은 내가 지금까지 가지고있는 것입니다. JpaRepository 인터페이스를 확장하는 SiteRepository이 있으며 다음과 같은 방법으로 구성됩니다.

@Query("SELECT s from Site s WHERE s.name LIKE :givenName") 
public List<Site> findByName(@Param("givenName") String givenName); 

이제 사용자는 아래의 방법에 문자열 값을 전달하는 가정 (예를 들어 "제인"또는 "메리 앤"). ":"하고 있는지, 내가 결장을 잘라 다음과 같은 문자를 연결하는 givenName 하위 문자열 위의 방법에서

public List<Site> findByName(String givenName) //Where Site is an entity with a name field. 

, 나는 기본적으로이 있는지 확인하기 위해 매개 변수 giveName의 첫 번째 문자를 확인합니다. 나는라고 그렇다면

return siteRepository.findByName("%" + givenName.substring(1, givenName.length()) + "%" 
       + " AND NOT LIKE _" + givenName.substring(1, givenName.length()) + "_"); 

, findByName(":Jane") 내가 다음 JPQL 쿼리를 얻어야한다 : 이것은 그러나 작동하지 않습니다 SELECT s from Site s WHERE s.name LIKE %Jane% AND NOT LIKE _Jane_

합니다. 어떤 도움을 주셔서 감사 드리며 미리 감사드립니다.

+0

모든 단어가 존재하고 단어의 첫 번째 색인이 다음 단어의 마지막 색인 앞에 있는지 확인하는 쿼리를 작성해야합니다. –

+0

알겠습니다. 저에게 jpql 쿼리를 작성하는 방법을 보여 주시겠습니까? – chinesewhiteboi

답변

0

해결책을 찾았습니다. 이것은 지금까지 테스트 한 경우에 효과가있는 것 같습니다.

"s 사이트 이름 s '이름이'Jane_ '이 아니고 s.name이'_Jane '이 아니며 s.name이 (가) 같지 않음'Jane 'AND s.name LIKE '% Jane %' "

0

나는 jpql의 전문가가 아니므로, 필자가 가정을 여기에 써야 할 필요는 없지만, 어쨌든 op를 도우려고 노력합니다.

내 대답이 잘못 되었다면, 대답에 대한 의견을 남겨주세요.

나는 내 대답이 반드시 정확하지 않다는 것을 분명히 했으므로이 답변이 아래로 투표 할 자격이 없다고 생각합니다. 올바르지 않은 경우 제거 할 것입니다.

이 내 생각은 기술적 인 세부 사항을 알지 못하고 질문에 주석으로 설명했다 : 당신은 모든 단어가 존재 하고 단어의 첫 번째 인덱스 이전 여부를 확인하는 쿼리를 작성해야

다음 단어의 마지막 색인. startIndex부터 candidateStringsearchString의 위치에 대한

LOCATE(searchString, candidateString [, startIndex]) 

검색 인덱스 아이디어는 종속 startIndex의 값을 갖는 0이 아닌 복귀를 찾을 것인지를 확인하는 질의를 작성하는 것이다 (1)로부터 시작되는 이전 문자열의 startIndex (Source) 모든 문자열이 기준과 일치하면 레코드를 결과에 포함해야합니다.

관련 문제