Hibernate 具有类似问题的HQL查询

Hibernate 具有类似问题的HQL查询,hibernate,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 '%:f

我正在使用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();

未解析字符串文本中的参数

您需要使用字符串连接将%s添加到参数值中-在程序端或

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();

我们可以使用多个concat来解决这个问题

SELECT pn.personId FROM PersonName pn WHERE pn.personNameType = 'FIRST' AND pn.name LIKE concat(concat('%', :firstName), '%')

那么区分大小写呢。有没有办法使它不区分大小写?谢谢你的回复@axtavtcast pn.name和参数firstName在您的queryWorks中以小写形式显示,就像一个符咒。我使用和pn.name类似“%”| |:firstName | |“%”来表示较短的方式。