% Like% Query in spring JpaRepository
Я хотел бы написать подобный запрос в JpaRepository
но он ничего не возвращает:
LIKE '%place%'
-its не работает.
LIKE 'place'
работает отлично.
Вот мой код:
@Repository("registerUserRepository")
public interface RegisterUserRepository extends
JpaRepository<Registration,Long>{
@Query("Select c from Registration c where c.place like:place")
List<Registration> findByPlaceContaining(@Param("place")String place);
}
Ответы
Ответ 1
Для запроса JPA для данных spring требуются символы "%", а также пробел char, следующий за 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
alltogether, поскольку это похоже на стандартный запрос (автоматически реализуемый прокси-серверами spring); т.е. используя одиночную линию
List<Registration> findByPlaceContaining(String place);
.
Ответ 2
Вам вообще не нужна аннотация @Query
.
Вы можете использовать только следующие
@Repository("registerUserRepository")
public interface RegisterUserRepository extends JpaRepository<Registration,Long>{
List<Registration> findByPlaceIgnoreCaseContaining(String place);
}
Ответ 3
Вы также можете реализовать подобные запросы, используя поддерживаемое Spring Data JPA ключевое слово "Conisting".
List<Registration> findByPlaceContaining(String place);
Ответ 4
Для вашего случая вы можете напрямую использовать методы JPA. Это как ниже:
Содержит: выберите... как%: место%
List<User> findByPlaceContainingIgnoreCase(String place);
здесь IgnoreCase поможет вам найти элемент, игнорируя регистр.
Вот несколько связанных методов:
-
Нравится findByPlaceLike
… Где x.place нравится? 1
-
Начиная с findByPlaceStartingWith
… Где x.place как? 1 (параметр связан с добавленным%)
-
EndingWith findByPlaceEndingWith
… Где x.place, как? 1 (параметр связан с добавленным%)
-
Содержит findByPlaceContaining
… Где x.place как? 1 (граница параметра обернута в%)
Больше информации, просмотрите эту ссылку и эту ссылку
Надеюсь, что это поможет вам :)
Ответ 5
У вас может быть одна альтернатива использования заполнителей:
@Query("Select c from Registration c where c.place LIKE %?1%")
List<Registration> findPlaceContainingKeywordAnywhere(String place);
Ответ 6
при вызове функции я использую: findByPlaceContaining("%" + place);
или: findByPlaceContaining(place + "%");
или: findByPlaceContaining("%" + place + "%");
Ответ 7
Попробуй это.
@Query("Select c from Registration c where c.place like '%'||:place||'%'")
Ответ 8
ответ точно будет
-->' @Query("select u from Category u where u.categoryName like %:input%")
List findAllByInput(@Param("input") String input);
Ответ 9
@Query(value = "select * from lcc_course lc where ((lc.fullname Like %?1%) or (lc.shortname Like %?1%) or (lc.idnumber Like %?1%))", nativeQuery = true)
public List<LCCCourse> findAllCourseByKeyword(String keyword);