Hibernate 命名查询使用 Like 和 % % 运算符?

问题描述 投票:0回答:4

在我的 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
运算符和
% %
所以它可以处理给定字符串的任何字符..

java hibernate jpa hql
4个回答
61
投票

您正在使用

query.setParameter("searchKeyword", searchKeyword+"%");

而不是

query.setParameter("searchKeyword", "%"+searchKeyword+"%");

第一个将返回

Narasimham
N
Na
Nar
Nara

的行。

19
投票

但是当我们给出 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+"%"
表示返回值包含搜索关键字。
根据您的要求决定。


9
投票

我会将我的声音添加到@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


0
投票

试试这个:

like '%'||:name||'%'"
© www.soinside.com 2019 - 2024. All rights reserved.