39

在我的 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

但是当我们给出Narasimhamiean

其实我的想法是我给Like操作员,% %所以它可以工作给定字符串的任何字符..

4

3 回答 3

59

您正在使用query.setParameter("searchKeyword", searchKeyword+"%");

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

第一个将返回Narasimham N Na Nar Nara等的行。

于 2013-01-02T09:06:38.930 回答
19

但是当我们给出 Narasimham 的任何字符时它不起作用,即 a 或 n

因为您正在进行区分大小写的搜索。尝试N, Na,Nar代替。如果要执行不区分大小写的搜索,请尝试使用upperor lower。喜欢

entityManager.createQuery("select at from AttendeesVO at where lower(at.user.firstName) LIKE lower(:searchKeyword)",AttendeesVO.class);  

实际上我的想法是我给 Like 运算符 % %

searchKeyword+"%"表示以searchKeyword开头的返回值。
"%"+searchKeyword+"%"表示包含搜索关键字的返回值。
根据您的要求决定。

于 2013-01-02T09:12:42.317 回答
9

我会将我的声音添加到@ssk,以便在关键字前后使用 2%。或者,如果您在查询本身中这样配置它,我认为它更专业的解决方案:

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

于 2019-01-18T11:05:01.123 回答