HQL 是否具有 Restrictions.ilike 的等效项(用于不区分大小写的匹配)?
我为Hibernate+MySQL写了一个项目。现在我把它移植到德比(出于多种原因)。
现在我发现 Derby 在查询中使用 LIKE 时区分大小写。这可以使用 Criteria 查询中的 Restrictions.ilike(...)
来解决...但是我有很多复杂的HQL查询使用它。有没有办法拥有类似于HQL中的功能?ilike
我为Hibernate+MySQL写了一个项目。现在我把它移植到德比(出于多种原因)。
现在我发现 Derby 在查询中使用 LIKE 时区分大小写。这可以使用 Criteria 查询中的 Restrictions.ilike(...)
来解决...但是我有很多复杂的HQL查询使用它。有没有办法拥有类似于HQL中的功能?ilike
HQL 中没有等效的功能。正如 Konstantin 在他的建议中已经指出的那样,您最好的选择是调整数据库连接并将排序规则设置为 ,如以下 JIRA:DERBY-1748:全局不区分大小写设置中所述。ilike
TERRITORY_BASED:SECONDARY
考虑到所有相等 () 和 s 都将不区分大小写。这可能有点过分了,不适合您的特定情况。=
like
解决这个问题的另一种方法是创建基于函数的索引(当然,如果Derby支持它们),并调整你的HQL以组合并喜欢这样。like
lower
Query q = session.createQuery("... WHERE lower(entity.field) like ?)");
q.setString(0, '%' + variable.toLowerCase() + '%');
如果 Derby 不支持 FBI(我认为它不支持),您还可以使用较低的值创建触发器填充列并为其编制索引。
更新似乎可以定义派生/自动生成的列,如其他 JIRA:JIRA-481:实现 SQL 生成的列中所述。
恐怕没有办法通过HQL实现这一点,因为它只是被翻译成原生SQL。我认为这可以通过调整架构来实现:
http://old.nabble.com/case-insensitive-searching-td17756019.html