使用 Like 和 % % 运算符的休眠命名查询?
Posted
技术标签:
【中文标题】使用 Like 和 % % 运算符的休眠命名查询?【英文标题】:Hibernate Named Query Using Like and % % operators? 【发布时间】:2012-12-16 15:42:17 【问题描述】:在我的 Hibernate JPA 示例代码中..
public List<AttendeesVO> addAttendees(String searchKeyword)
TypedQuery<AttendeesVO> query = entityManager.createQuery(" select at from AttendeesVO at where at.user.firstName LIKE :searchKeyword",AttendeesVO.class);
query.setParameter("searchKeyword", searchKeyword+"%");
return query.getResultList();
给整个字符串firstName=Narasimham
时工作正常
但是当我们给出Narasimham
的任何字符时它不起作用,即a
或n
实际上我的想法是我给Like
运算符和% %
一起工作,所以它可以工作给定字符串的任何字符..
【问题讨论】:
【参考方案1】:你正在使用query.setParameter("searchKeyword", searchKeyword+"%");
而不是query.setParameter("searchKeyword", "%"+searchKeyword+"%");
第一个将返回 Narasimham
N
Na
Nar
Nara
等的行。
【讨论】:
【参考方案2】:但是当我们赋予 Narasimham 的任何角色时它不起作用,即 或n
因为您正在进行区分大小写的搜索。请改用N
、Na
、Nar
。如果您想执行不区分大小写的搜索,请尝试使用upper
或lower
。喜欢
entityManager.createQuery("select at from AttendeesVO at where lower(at.user.firstName) LIKE lower(:searchKeyword)",AttendeesVO.class);
其实我的想法是我用 % % 给 Like 运算符
searchKeyword+"%"
表示返回值以 searchKeyword 开头。"%"+searchKeyword+"%"
表示返回值包含 searchKeyword。
根据您的要求决定。
【讨论】:
【参考方案3】:我会将我的声音添加到@ssk,以便在关键字前后使用两个 %。 或者,如果您在查询本身中这样配置它,我认为它更专业的解决方案:
public List<AttendeesVO> addAttendees(String searchKeyword)
TypedQuery<AttendeesVO> query = entityManager.createQuery(" select at from AttendeesVO
at where at.user.firstName LIKE CONCAT('%',:searchKeyword,'%')",AttendeesVO.class);
query.setParameter("searchKeyword", searchKeyword);
return query.getResultList();
因为 '%' 是查询的一部分而不是你以后可能填写的参数
CONCAT() 函数将两个或多个表达式相加。 https://www.w3schools.com/sql/func_mysql_concat.asp
【讨论】:
以上是关于使用 Like 和 % % 运算符的休眠命名查询?的主要内容,如果未能解决你的问题,请参考以下文章