programing

스프링 Jpa Repository의 %Like% 쿼리

goodcopy 2022. 11. 6. 13:28
반응형

스프링 Jpa Repository의 %Like% 쿼리

에 비슷한 질문을 쓰고 싶습니다.JpaRepository그러나 아무것도 반환되지 않습니다.

LIKE '%place%'- 작동하지 않습니다.

LIKE 'place'완벽하게 동작합니다.

제 코드는 다음과 같습니다.

@Repository("registerUserRepository")
public interface RegisterUserRepository extendsJpaRepository<Registration,Long> {

    @Query("Select c from Registration c where c.place like :place")
     List<Registration> findByPlaceContaining(@Param("place")String place);
}

스프링 데이터 JPA 쿼리에는 "%" 문자와 다음 공백 문자가 필요합니다.like질문에서와 같이

@Query("Select c from Registration c where c.place like %:place%").

참조: http://docs.spring.io/spring-data/jpa/docs/current/reference/html

이 기능을 해제하는 것이 좋을 수도 있습니다.@Query표준 쿼리(스프링 데이터 프록시에 의해 자동으로 구현됨)와 유사한 것처럼 보이는 주석, 즉 단일 라인 사용

List<Registration> findByPlaceContaining(String place);

충분합니다.

실제로 필요한 것은 아닙니다.@Query주석을 달아야 합니다.

다음 것만 사용하시면 됩니다.

    @Repository("registerUserRepository")
    public interface RegisterUserRepository extends JpaRepository<Registration,Long>{
    
    List<Registration> findByPlaceIgnoreCaseContaining(String place);

    }

이 경우 JPA 메서드를 직접 사용할 수 있습니다.이 코드는 다음과 같습니다.

내용: 선택...예를 들어 %: 플레이스 %

List<Registration> findByPlaceContainingIgnoreCase(String place);

여기서 Ignore Case를 사용하면 대소문자를 무시한 채 항목을 검색할 수 있습니다.

JPQL에서의 @Query 사용:

@Query("Select registration from Registration registration where 
registration.place LIKE  %?1%")
List<Registration> findByPlaceContainingIgnoreCase(String place);

다음은 관련된 몇 가지 방법입니다.

  1. 맘에 들다 findByPlaceLike

    …여기서 x.place는 ?1과 같습니다.

  2. 처음에 findByPlaceStartingWith

    …여기서 x.place는 ?1과 같습니다(%가 추가된 파라미터 바인딩).

  3. 엔딩 findByPlaceEndingWith

    …여기서 x.place는 ?1과 같습니다(파라미터의 선두에 %가 부가됩니다).

  4. 재중 findByPlaceContaining

    …여기서 x.place는 ?1(%로 둘러싸인 파라미터)과 같습니다.

자세한 내용은 이 링크, 이 링크 이 링크를 참조하십시오.

이것이 도움이 되기를 바랍니다:)

Spring Data JPA가 지원하는 키워드 "Containing"을 사용하여 유사한 쿼리를 구현할 수도 있습니다.

List<Registration> findByPlaceContaining(String place);

이거 먹어봐.

@Query("Select c from Registration c where c.place like '%'||:place||'%'")

플레이스 홀더를 다음과 같이 사용할 수 있습니다.

@Query("Select c from Registration c where c.place LIKE  %?1%")
List<Registration> findPlaceContainingKeywordAnywhere(String place);

펑션을 호출할 때 다음을 사용합니다.findByPlaceContaining("%" + place);

또는 다음과 같이 입력합니다.findByPlaceContaining(place + "%");

또는 다음과 같이 입력합니다.findByPlaceContaining("%" + place + "%");

나는 이것을 사용한다.

@Query("Select c from Registration c where lower(c.place) like lower(concat('%', concat(:place, '%')))")

lower()는 String의 To Lower Case와 같기 때문에 결과는 대소문자를 구분하지 않습니다.

정확하게 대답하다

-->' @Query("u.categoryName이 %:input%와 같은 카테고리 u에서 u를 선택합니다")find All By 목록입력(@Param("input") 문자열 입력);

네이티브 쿼리를 사용할 수 있습니다.

@Query(nativeQuery = true, value ="Select * from Registration as c where c.place like %:place%")

List<Registration> findByPlaceContaining(@Param("place")String place);

없는 솔루션 발견@Query(실제로 어느 쪽이 '합격'인지 시험해 보았습니다.하지만 효과가 없었습니다).

돌아와야 한다Page<Entity>대신List<Entity>:

public interface EmployeeRepository 
                          extends PagingAndSortingRepository<Employee, Integer> {
    Page<Employee> findAllByNameIgnoreCaseStartsWith(String name, Pageable pageable);
}

IgnoreCase이 목표를 달성하기 위해 부품이 중요했습니다!

파라미터 뒤에 '좋아요'라는 키워드를 말하면 됩니다.

List<Employee> findAllByNameLike(String name);

우리 이렇게

@Query("CasFhgDeviceView에서"deviceGroupName이 concat('%CSGW%', :usid), '%'와 같은 경우")

다양한 접근법이 있을 수 있습니다.많은 답변에서 언급했듯이 가능하면 JPA 사전 정의된 템플릿 쿼리를 사용할 수 있습니다.

List<Registration> findByPlaceContainingIgnoreCase(String place);

또한 위의 메서드를 호출하기 전에 Java 계층에 '%'를 추가할 수 있습니다.

복잡한 쿼리의 경우 일반적으로 @Query one을 사용할 수 있습니다.

@Query("Select r from Registration r where r.place like '%' || :place || '%'")

가독성을 위해 아래를 사용할 수 있습니다.

@Query("Select r from Registration r where r.place like CONCAT('%', :place, '%'")

는 이런 하지 않을 수 .CONCAT('%',:setName,'%')

이것은 이제 스프링 데이터 JPA를 통해 가능합니다.http://docs.spring.io/spring-data/jpa/docs/current/reference/html/ #syslogs-by-syslogs를 참조하십시오.

Registration registration = new Registration();
registration.setPlace("UK");

ExampleMatcher matcher = ExampleMatcher.matchingAll()
  .withIgnoreCase()
  .withStringMatcher(StringMatcher.CONTAINING);

Example<Registration> example = Example.of(registration, matcher);

List<Registration> registrationList = registerUserRepository.findAll(example);

언급URL : https://stackoverflow.com/questions/25362540/like-query-in-spring-jparepository

반응형