получить count (*), используя createSQLQuery в спящем режиме? - PullRequest
1 голос
/ 01 апреля 2010

У меня есть несколько SQL-запросов, которые я просто хочу запустить в базе данных. Я использую hibernate во всем приложении, поэтому я бы предпочел использовать hibernate для вызова этих sql запросов.

В приведенном ниже примере я хочу получить count + name, но не могу понять, как получить эту информацию при использовании createSQLQuery ().

Я видел обходные пути, когда людям нужно всего лишь получить один «счетчик ()» из результата, но в этом случае я использую счетчик () + столбец в качестве результата

SELECT count(*), a.name as count FROM user a
WHERE a.user_id IN (SELECT b.user_id FROM user b)
GROUP BY a.name
HAVING COUNT(*) BETWEEN 2 AND 5;

Кстати, приведенный выше запрос выдаст такой результат, если я вызову его непосредственно в базе данных:

1, John
2, Donald
1, Ralph
...

Ответы [ 3 ]

3 голосов
/ 21 августа 2012

В качестве альтернативы вы можете использовать

SQLQuery query = session.createSQLQuery("SELECT count(*) as num, a.name as name FROM user a WHERE a.user_id IN (SELECT b.user_id FROM user b) GROUP BY a.name HAVING COUNT(*) BETWEEN 2 AND 5;";

query.addScalar("num", Hibernate.INTEGER).addScalar("name", Hibernate.STRING); 
// you might need to use org.hibernate.type.StandardBasicTypes.INTEGER / STRING 
// for Hibernate v3.6+, 
// see https://hibernate.onjira.com/browse/HHH-5138

List<Object> result = query.list();
// result.get(2*i + 0) -> i-th row num
// result.get(2*i + 1) -> i-th row name

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

ура!

Якуб

0 голосов
/ 08 апреля 2010

поболеть за информацию Томас, прекрасно работал для создания объектов

проблема с моим первоначальным запросом заключалась в том, что "count" было зарезервированным словом: P когда я сменил имя на что-то другое, это сработало.

0 голосов
/ 01 апреля 2010

Если ваш оператор SQL выглядит следующим образом SELECT count(*) as count, a.name as name..., вы можете использовать setResultTransformer(new AliasToBeanResultTransformer(YourSimpleBean.class)) на вашем Query.
Где YourSimpleBean имеет поля Integer count и String name соответственно для установщиков setCount и setName.
При выполнении запроса с query.list() hibernate вернет список YourSimpleBeans.

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