HQL like运算符用于不区分大小写的搜索

mad*_*dhu 21 spring hibernate spring-mvc sql-like

我正在使用Jquery实现自动完成功能,当我输入名称时,它从数据库中获取记录,存储在db中的记录是大写和小写字母的混合.我编写了一个HQL查询,它以区分大小写的方式获取记录,但我需要记录而不管大小写.这是查询,

List<OrganizationTB> resultList = null;
Query query = session.createQuery("from DataOrganization dataOrg where dataOrg.poolName   
like '%"+ poolName +"%'");
resultList =  query.list();    
Run Code Online (Sandbox Code Playgroud)

例如:如果我有池名称,HRMS数据集,Hrms数据,Hr数据等...如果我输入HR或hr我需要获得所有3条记录,这是我无法做到的.

请帮忙...

Jig*_*ekh 51

将您的查询更改为

"from DataOrganization dataOrg where lower(dataOrg.poolName)   
like lower('%"+ poolName +"%')"
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请查看14.3 doc

  • 对于类似表达式,你不认为`poolName.toLowerCase()`是`lower('%"+ poolName +"%')"`的一个很好的选择,因为它可以防止HQL函数转换为DB特定函数的额外开销? (2认同)

Vas*_*ors 11

一个好的解决方案是:

List<OrganizationTB> resultList = null;
Query query = session.createQuery("from DataOrganization dataOrg where lower(dataOrg.poolName) like :poolName");
query.setParameter("poolName", '%'+poolName.toLowerCase()+'%');
resultList =  query.list();
Run Code Online (Sandbox Code Playgroud)

因此,您可以保护代码免受SQL注入

  • 如果只让一层来做小写工作,会更干净。左侧为 HQL 小写,右侧为 Java 小写。 (2认同)