Как использовать отчетливый в hql - PullRequest
0 голосов
/ 09 февраля 2012

Я работаю над веб-приложением, использующим Hibernate, Struts и Extjs, Вот мой сценарий.

String hql = "from product";

В моей таблице товаров есть три столбца: id, name, section

Мне нужны результаты, основанные на различном названии продукта, но у меня есть только один вариант - написать hql, другого варианта нет.

Я могу использовать group by, но мне нужен размер результата

поэтому я использую hql.list().get(0);

В моем коде выше код является общим методом, то есть каждый дао использует один и тот же метод.

Я могу использовать объединения, но данные исчисляются миллионами, поэтому выполнение запроса выполняется слишком медленно, Так что любой может помочь, как я могу написать отличное ключевое слово в hql.

Ответы [ 2 ]

0 голосов
/ 22 февраля 2013

У меня есть ответ на Hibernate Query Language для использования различных полей.Вы можете использовать SELECT DISTINCT(TO_CITY) FROM FLIGHT_ROUTE.Если вы используете SQL-запрос, он возвращает String List.Вы не можете использовать это возвращаемое значение по классу сущностей.Поэтому для решения проблемы такого типа используйте HQL с SQL.

ОТ FLIGHT_ROUTE F, ГДЕ F.ROUTE_ID
IN (ВЫБЕРИТЕ SF.ROUTE_ID ОТ FLIGHT_ROUTE SF GROUP BY SF.TO_CITY) ";

Из оператора запроса SQL он получает DISTINCT ROUTE_ID и вводит в виде списка. И фильтр запросов IN отличает TO_CITY от IN (Список).

Тип возвращаемого значения - тип объекта Entity BeanТак что вы можете сделать это в AJAX, например, в Автозаполнении.

0 голосов
/ 09 февраля 2012

Вот фрагмент hql, который мы используем.(Имена были изменены для защиты идентификаторов)

String queryString = "select distinct f from Foo f inner join foo.bars as b" +
                " where f.creationDate >= ? and f.creationDate < ? and b.bar = ?";
        return getHibernateTemplate().find(queryString, new Object[] {startDate, endDate, bar});

Стоит отметить, что ключевое слово "Different" в HQL не сопоставляется напрямую с ключевым словом "Different" в SQL.

Если выиспользуйте ключевое слово «Different» в HQL, тогда иногда Hibernate будет использовать ключевое слово «SQL», но в некоторых ситуациях он будет использовать преобразователь результатов для получения разных результатов.Например, когда вы используете внешнее объединение, подобное следующему:

выберите отличный o из Порядка o выборка левого соединения o.lineItems

В этом случае невозможно отфильтровать дубликаты на уровне SQLслучай, поэтому Hibernate использует resultTransformer для фильтрации дубликатов ПОСЛЕ выполнения SQL-запроса.

...