Есть ли в HQL эквивалент для Restrictions.ilike (для сопоставления без учета регистра)? - PullRequest
14 голосов
/ 02 ноября 2011

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

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

Ответы [ 3 ]

18 голосов
/ 02 ноября 2011

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

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

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

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

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

ОБНОВЛЕНИЕ Кажется возможным определить производные / автоматически сгенерированные столбцы, как объяснено в этом другом JIRA: JIRA-481: реализовать сгенерированные SQL столбцы .

2 голосов
/ 02 ноября 2011

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

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

0 голосов
/ 14 апреля 2013

Обойти это можно было бы путем преобразования обоих слов в верхний регистр (или нижний регистр) примерно так:

от кошки DomesticCat, где верхний (имя кошки), как 'FRI%'

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

...