hibernate - 与LIKE的HQL查询出现问题

标签 hibernate hql

我正在使用HQL进行搜索查询,并且一切正常,直到找到LIKE子句为止。无论我做什么,似乎都无法正确执行LIKE子句。这是我的查询。

String QUERY = "FROM Person as p WHERE p.createUser = : createUser 
     AND p.personId in (SELECT pn.personId FROM PersonName pn WHERE pn.personNameType = 'FIRST' AND pn.name LIKE '%:firstName%')";

(List<Person>)session.createQuery(QUERY).setString("createUser", createUser).setString("firstName", firstName).list();

最佳答案

字符串文字中的参数无法解析。

您需要使用字符串串联将%添加到参数值-在程序端

String QUERY = "FROM Person as p WHERE p.createUser = : createUser 
     AND p.personId in " +
     "(SELECT pn.personId FROM PersonName pn " + 
     "WHERE pn.personNameType = 'FIRST' " + 
     "AND pn.name LIKE :firstName)";

(List<Person>)session.createQuery(QUERY)
    .setString("createUser", createUser)
    .setString("firstName", "%" + firstName + "%").list();

或在数据库端:
String QUERY = "FROM Person as p WHERE p.createUser = : createUser 
     AND p.personId in " +
     "(SELECT pn.personId FROM PersonName pn " + 
     "WHERE pn.personNameType = 'FIRST' " + 
     "AND pn.name LIKE CONCAT('%', :firstName, '%'))";

(List<Person>)session.createQuery(QUERY)
    .setString("createUser", createUser)
    .setString("firstName", firstName).list();

关于hibernate - 与LIKE的HQL查询出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5420155/

相关文章:

mysql - 将 SQL Join 查询转换为 HQL Join 查询

java - 单向关联比双向关联更抽象吗?

java - 在 Hibernate 视角下生成代码时忽略表前缀

java - 命名异常 : jta. 用户事务

java - HQL 查询对关联对象的关联对象有条件

java - 从 HQL 中获取带有特殊字符的数据

hibernate - JPQL 中的索引元素访问

java - 为什么当字段上的 updatable=false 时 hibernate 做 areEqual

java - Hibernate:线程 "main"org.hibernate.MappingException 中出现异常:无效配置

java - hibernate delete with string 类型集合