2017-12-09 2 views
0

나는 다음과 같은 JPA 저장소 있습니다JPA 저장소와 와일드 카드 필드 QueryByExample

public interface PostRepository extends JpaRepository<Post, String> { 

    List<Post> findAll(); 

    List<Post> findByExample(Example<Post> example); 
} 

내가 필요로하는 것은 예를 들어 있지만 하나의 필드에 와일드 카드를 취할 findByExample을 수정하는 것입니다. 따라서이 경우 "title"필드는 'like'또는 'contains'와 같은 SQL과 동일해야합니다.

봄 문서는이 보여

Person person = new Person();       
person.setFirstname("Dave");       

ExampleMatcher matcher = ExampleMatcher.matching()  
    .withIgnorePaths("lastname")       
    .withIncludeNullValues()        
    .withStringMatcherEnding();       

Example<Person> example = Example.of(person, matcher); 

https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.query-methods에서을하지만 난이 사용 (기본 방법 가정) 내 인터페이스를 사용자 정의하는 방법을 모르겠어요.

또는 스프링이 기능을 자동 구성하는 방법의 특정 이름이 같은

List<Post> findByExampleTitleLike(Example<Post> example); 

TIA

답변

0

나는 이런 식으로 일을 해요 :

Person person = ... 
PageRequest page = ... 
ExampleMatcher matcher = ExampleMatcher.matching().withMatcher(
           "lastname", 
           ExampleMatcher.GenericPropertyMatcher.of(ExampleMatcher.StringMatcher.CONTAINING).ignoreCase() 
         ); 
return personRepository.findByExample(Example.of(person, matcher), page).getContent(); 

'like'또는 'contains'StringMatcher.CONTAINING에 의해 수행됩니다. Additionaly ignoreCase() 추가하여 대/소문자를 구분하지 않습니다.

누군가가 짧은 구문을 알고 있다면 나는 행복하게 보게 될 것입니다.

+0

귀하의 서비스에 포함 되었습니까? 내일 시험해 보겠습니다. 덕분에 – Wayneio

+0

예, 서비스 중입니다. –