我为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中所述.