我正在使用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/