加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-14 16:27:04 所属栏目:Java 来源:网络整理
导读:我为Hibernate MySQL编写了一个项目.现在我把它移植到德比(原因很多). 现在我发现Derby在查询中使用LIKE时区分大小写.这可以使用 Restrictions.ilike(...) 在Criteria查询中解决…但是我有许多复杂的HQL查询使用它.有没有办法在HQL中有类似的功能? 解决方法
我为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中所述.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读