我正在尝试实现一个存储库查询方法来按地址名称搜索地址。我希望此搜索查询不区分大小写。
我在地址信息库中定义了以下搜索方法。但是这种搜索是区分大小写的。
@Query(value = "select ad from #{#entityName} ad where ad.houseName LIKE :houseName%")
public Page<LocalAddress> findByHouseName(@Param("houseName") String houseName, Pageable page);
如何使此查询不区分大小写?
答案 0 :(得分:2)
要实现您的任务,您不需要手动编写查询,只需使用Spring Data magic:
Page<LocalAddress> findByHouseNameIgnoreCaseContaining(String partOfHouseName, Pageable page);
此方法将使用不区分大小写的like
运算符,并从数据库中独立获取数据。
尽管如此,您可以在JPQL查询中明确指定:
@Query("select a from LocalAddress a where upper(a.houseName) like concat('%', upper(?1), '%')")
Page<LocalAddress> getByName(String partOfHouseName, Pageable page)
此处有更多信息:JPQL Reference
答案 1 :(得分:0)
嗯,这是数据库引擎的问题。 SpEL仅计算表达式并使用值替换占位符。请参阅问题How can I search (case-insensitive) in a column using LIKE wildcard?