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

时间:2013-01-02 09:00:38

标签: java hibernate jpa hql

在我的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的任何字符,即an

,则无效

实际上我的想法是我给Like运算符% %所以它可以处理给定String的任何字符..

3 个答案:

答案 0 :(得分:51)

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

而不是query.setParameter("searchKeyword", "%"+searchKeyword+"%");

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

答案 1 :(得分:18)

  

但是当我们给出Narasimham的任何一个角色时,它就不起作用了   或者

因为您正在进行区分大小写的搜索。请尝试NNaNar。如果您要执行不区分大小写的搜索,请尝试使用upperlower。喜欢

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

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

searchKeyword+"%"表示 searchKeyword开头的返回值 "%"+searchKeyword+"%"表示包含 searchKeyword的返回值 根据您的要求决定。

答案 2 :(得分:1)

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