java – HQL与Restrictions.ilike等效(用于不区分大小写的匹配)?

前端之家收集整理的这篇文章主要介绍了java – HQL与Restrictions.ilike等效(用于不区分大小写的匹配)?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我为Hibernate MySQL编写了一个项目.现在我把它移植到德比(原因很多).

现在我发现Derby在查询中使用LIKE时区分大小写.这可以使用Restrictions.ilike(...)在Criteria查询解决…但是我有许多复杂的HQL查询使用它.有没有办法在HQL中有类似的功能

解决方法

HQL中没有类似的功能.正如康斯坦丁在 suggestion中已经指出的那样,你最好的选择是 tune the database connection,并将 collation设置为TERRITORY_BASED:SECONDARY,正如JIRA: DERBY-1748: Global case insensitive setting所述.

考虑到所有的平等(=)和喜欢将是不区分大小写.这可能有点太远了,不适合你的特殊情况.

解决这个问题的另一种方法将是创建基于函数的索引(如果Derby支持它们,那么当然)并且调整你的HQL以便像这样结合起来.

Query q = session.createQuery("... WHERE lower(entity.field) like ?)");
q.setString(0,'%' + variable.toLowerCase() + '%');

如果Derby不支持FBI(我认为没有),您还可以创建具有较低值的触发器填充列并对其进行索引.

更新似乎可以定义派生/自动生成的列,如其他JIRA:JIRA-481: implement SQL generated columns中所述.

猜你在找的Java相关文章