Подтвердить что ты не робот

Имеет ли HQL эквивалент для Restrictions.ilike(для нечувствительности к регистру)?

Я написал проект для Hibernate + MySQL. Теперь я портирую его в Дерби (по ряду причин).

Теперь я обнаружил, что Derby чувствителен к регистру при использовании LIKE в запросах. Это можно решить с помощью Restrictions.ilike(...) в запросах Criteria... но у меня много сложных запросов HQL, которые используют это. Есть ли способ иметь функциональность, похожую на ilike в HQL?

4b9b3361

Ответ 1

В HQL нет эквивалентной функциональности ilike. Как уже указывал Константин в своем , ваш лучший выбор - настроить соединение с базой данных и установите collation на TERRITORY_BASED:SECONDARY, как описано в этой JIRA: DERBY-1748: глобальная чувствительность к регистру.

Учтите, что все равенства (=) и like будут нечувствительны к регистру. Это может зайти слишком далеко и не подходит для вашей конкретной ситуации.

Другим способом решения этой проблемы будет создание функциональных индексов (если, конечно, Derby поддерживает их), и настройте свой HQL, чтобы объединить like и lower следующим образом.

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

Если Derby не поддерживает FBI (я думаю, что это не так), вы также можете создавать столбцы с триггерным заполнением с более низкими значениями и индексировать их.

UPDATE Кажется, что можно определить столбцы с производными/автогенерированными, как описано в этой другой JIRA: JIRA-481: реализовать столбцы, сгенерированные SQL.

Ответ 2

Я боюсь, что этого не получается с помощью HQL, так как он просто переводится на собственный SQL. Я думаю, что это может быть возможно с помощью настройки схемы:

http://old.nabble.com/case-insensitive-searching-td17756019.html

Ответ 3

легким обходным решением было бы преобразовать оба слова в верхний регистр (или в нижний регистр) примерно так:

из котла DomesticCat, где верхний (cat.name), например, "FRI%"

ссылки: http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/queryhql.html