HQL是否具有Restrictions.ilike的等效项(用于不区分大小写的匹配)?

got*_*ch4 14 java sql hibernate hql derby

我为Hibernate + MySQL编写了一个项目.现在我将它移植到德比(出于多种原因).

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

Xav*_*ica 18

ilikeHQL中没有等效的功能.正如康斯坦丁已经在他指出的建议,你最好的选择是调整数据库连接并设置整理TERRITORY_BASED:SECONDARY,在此JIRA解释说:DERBY-1748:全球不区分大小写的设置.

考虑到所有等式(=)和likes将不区分大小写.这可能有点太过分了,并不适合您的特定情况.

解决这个问题的另一种方法是创建基于函数的索引(当然,如果Derby支持它们),并调整你的HQL来组合likelower喜欢这样.

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

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

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

  • 如果你愿意,你也可以使用"lower(entity.field)like lower(?)",如果你想让DB处理String小写的话.在我的情况下,我更喜欢这种方式让声明更容易阅读... (3认同)