같은 쿼리를 작성하고 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%")
.
Cf. 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);
}
답변
SpringData JPA 지원 키워드 “Containing”을 사용하여 유사 쿼리를 구현할 수도 있습니다 .
List<Registration> findByPlaceContaining(String place);
답변
귀하의 경우에는 JPA 방법을 직접 사용할 수 있습니다. 그것은 다음과 같습니다.
포함 : select … like % : place %
List<Registration> findByPlaceContainingIgnoreCase(String place);
여기서 IgnoreCase 는 케이스를 무시하고 항목을 검색하는 데 도움이됩니다.
JPQL에서 @Query 사용 :
@Query("Select registration from Registration registration where
registration.place LIKE %?1%")
List<Registration> findByPlaceContainingIgnoreCase(String place);
다음은 몇 가지 관련 방법입니다.
-
처럼
findByPlaceLike
… x.place는? 1
-
로 시작
findByPlaceStartingWith
… 여기서 x.place like? 1 (파라미터는 %가 추가됨)
-
EndingWith
findByPlaceEndingWith
… x.place like? 1 (파라미터는 %로 묶여 있음)
-
포함
findByPlaceContaining
… x.place like? 1 (파라미터 경계가 %로 래핑 됨)
이것이 당신을 도울 것입니다 🙂
답변
자리 표시자를 다음과 같이 사용하는 대안 중 하나를 사용할 수 있습니다.
@Query("Select c from Registration c where c.place LIKE %?1%")
List<Registration> findPlaceContainingKeywordAnywhere(String place);
답변
이 시도.
@Query("Select c from Registration c where c.place like '%'||:place||'%'")
답변
통화 기능을 사용할 때 다음을 사용합니다.
findByPlaceContaining("%" + place);
또는:
findByPlaceContaining(place + "%");
또는:
findByPlaceContaining("%" + place + "%");