programing

봄 데이터 JPA의 항목 목록을 포함 쿼리를 사용하여 여러 열 검색

topblog 2023. 6. 7. 22:05
반응형

봄 데이터 JPA의 항목 목록을 포함 쿼리를 사용하여 여러 열 검색

저는 도서관 API에 관련된 일을 하고 있으며, 책을 찾는 것이 목표입니다.지금 이 책은 제가 검색하고 싶은 두 가지 흥미로운 가치를 가지고 있습니다.제목 및 게시판(책 뒷면의 텍스트).

기본 데이터베이스는 MariaDB입니다.

JPA 쿼리를 작성했습니다.

Iterable<Book> findByTitleContainsOrBlurbContains(String query, String query2)

query와 query2의 내용이 동일합니다.한 번의 용어 검색으로 이 접근 방식은 잘 작동했지만, 두 개 이상의 단어가 burb와 title 사이에 섞여 있을 때 이 접근 방식이 작동하지 않게 되었습니다.이것은 이해할 수 있습니다.

저의 두 번째 시도는 모든 용어를 문자열 값 목록으로 나누는 것이었습니다.

Iterable<Book> findByTitleContainsIsInOrBlurbContainsIsIn(List<String> query, List<String> query2);

이것도 효과가 없었습니다.응용 프로그램이 컴파일되지 않습니다.

포함 컨텍스트의 항목 목록으로 두 열을 검색하는 방법이 있습니까?

여기에 설명된 것처럼 정규식 쿼리가 이를 달성하는 한 가지 방법이 될 수 있습니다. MySQL LIKE IN()?

하는 동안에REGEX나열된 키워드 중 하나입니다. spring-data-jpa는 (아직) 지원하지 않는 것 같습니다(버전 2.5: regex-).type 존재하지만 평가되지 않기 때문에 다음과 같은 것.queryByAttributeRegex(String regex)작동하지 않음).

대체 기본 쿼리:

@Query(nativeQuery = true, value = "SELECT * FROM my_entity WHERE "
      + "attribute1 REGEXP CONCAT_WS('|', :list1) " + "OR "
      + "attribute2 REGEXP CONCAT_WS('|', :list2) ")
    List<MyEntity> findByAttributeList1Or2( // (method name does not matter)
                     @Param("list1") Collection<String> list1,
                     @Param("list2") Collection<String> list2);

CONCAT_WS제공된 목록에 가입합니다(예:('val1', 'val2')로.'val1|val2'예를 들어 '완전'과 일치할 것입니다.val2xxx'입니다.

가지 테스트와 함께 전체 예를 보려면 여기를 참조하십시오.

언급URL : https://stackoverflow.com/questions/69373878/searching-multiple-colums-with-a-contains-query-with-a-list-of-items-in-spring-d

반응형