我想在JpaRepository
中写一个类似的查询,但它没有返回任何内容:
LIKE '%place%'
- 它不起作用。
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);
}
答案 0 :(得分:148)
spring数据JPA查询需要&#34;%&#34; chars以及查询中like
后面的空格字符,如
@Query("Select c from Registration c where c.place like %:place%")
。
比照。 http://docs.spring.io/spring-data/jpa/docs/current/reference/html
您可能希望完全删除@Query
注释,因为它似乎类似于标准查询(由spring数据代理自动实现);即使用单行
List<Registration> findByPlaceContaining(String place);
就足够了。
答案 1 :(得分:74)
您根本不需要@Query
注释。
您可以使用以下
@Repository("registerUserRepository")
public interface RegisterUserRepository extends JpaRepository<Registration,Long>{
List<Registration> findByPlaceIgnoreCaseContaining(String place);
}
答案 2 :(得分:19)
您还可以使用Spring Data JPA支持的关键字"Containing"来实现类似的查询。
List<Registration> findByPlaceContaining(String place);
答案 3 :(得分:11)
对于您的情况,可以直接使用JPA方法。就像下面这样:
包含:选择...,例如%: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类似于?1(参数附加了%)
结尾为 findByPlaceEndingWith
…其中x.place类似于?1(参数与前缀%绑定)
包含的findByPlaceContaining
…其中x.place像?1(参数绑定在%中)
更多信息,查看this link,this link和this
希望这会对您有所帮助:)
答案 4 :(得分:5)
您可以使用占位符替代方法:
@Query("Select c from Registration c where c.place LIKE %?1%")
List<Registration> findPlaceContainingKeywordAnywhere(String place);
答案 5 :(得分:1)
当打电话时,我使用:
findByPlaceContaining("%" + place);
或:
findByPlaceContaining(place + "%");
或:
findByPlaceContaining("%" + place + "%");
答案 6 :(得分:1)
答案确切
-->` @Query("select u from Category u where u.categoryName like %:input%") List findAllByInput(@Param("input") String input);
答案 7 :(得分:1)
尝试一下。
@Query("Select c from Registration c where c.place like '%'||:place||'%'")
答案 8 :(得分:1)
我使用这个:
@Query("Select c from Registration c where lower(c.place) like lower(concat('%', concat(:place, '%')))")
lower()类似于String中的toLowerCase,因此结果不区分大小写。
答案 9 :(得分:0)
找到了没有@Query
的解决方案(实际上,我尝试了“接受”的解决方案。但是,它没有用)。
必须返回Page<Entity>
而不是List<Entity>
:
public interface EmployeeRepository
extends PagingAndSortingRepository<Employee, Integer> {
Page<Employee> findAllByNameIgnoreCaseStartsWith(String name, Pageable pageable);
}
IgnoreCase
部分对于实现这一目标至关重要!
答案 10 :(得分:0)
您可以在参数后简单地说“Like”关键字..
List<Employee> findAllByNameLike(String name);