Использование Hibernate DetachedCriteria для вызова агрегатных функций - PullRequest
0 голосов
/ 28 апреля 2011

У меня есть DetachedCriteria, который я использую для поиска в таблице на основе поля имени. Я хочу сделать поиск без учета регистра, и мне интересно, есть ли способ сделать это без использования HQL. Что-то вроде:

private void searchByFullName(DetachedCriteria criteria, String searchCriteria) {
        criteria.add(Restrictions.like("fullName", "%" + searchCriteria.toLowerCase() + "%"));
        criteria.addOrder(Order.asc("fullName"));
}

Но я хочу убедиться, что он будет игнорировать случай, когда он выполняет поиск (он должен искать как верхний, так и нижний регистр), поэтому генерируемый им SQL должен выглядеть примерно так:

SELECT * FROM Student WHERE ? LIKE toLower(FULL_NAME);

Ответы [ 2 ]

0 голосов
/ 24 мая 2011

вижу два варианта,

Вариант 1:

private void searchByFullName(DetachedCriteria criteria, String searchCriteria) {
            criteria.add(Restrictions.like("toLower(fullName)", "%" + searchCriteria.toLowerCase() + "%"));
            criteria.addOrder(Order.asc("fullName"));
    }

Вариант 2:

private void searchByFullName(DetachedCriteria criteria, String searchCriteria) {
                criteria.add(Restrictions.sqlRestriction("toLower({alias}.fullName) LIKE '%" + searchCriteria.toLowerCase() + "%'"));
                criteria.addOrder(Order.asc("fullName"));
        }

Я не очень оптимистичен в отношении варианта 1. Вариант 2 должен работать наверняка. {alias} является заполнителем, чтобы Hibernate знал, что ему нужно добавить соответствующий псевдоним для таблицы при создании SQL. Подробнее http://docs.jboss.org/hibernate/core/3.5/api/org/hibernate/criterion/Restrictions.html#sqlRestriction%28java.lang.String%29

0 голосов
/ 24 мая 2011

Какую базу данных вы используете?MySQL LIKE нечувствителен к регистру для столбцов CHAR, VARCHAR и TEXT (я считаю, что то же самое верно для SQL Server).Я захочу использовать оператор ILIKE, поэтому вам нужно использовать Restrictions.ilike ("fullName", name).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...