2012-06-20 2 views
0

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

У меня есть следующий запрос.

List<PurchaseRequest> prs = this.session.createCriteria(PurchaseRequest.class).list(); 

в пределах PurchaseRequest, у меня есть столбец current_state. Я хотел бы запросить все строки PurchaseRequest и сгруппировать current_states вместе, чтобы я мог получить общее количество каждого current_state.

Государства выглядят так, создатель, авторизатор, цедент. и т.д.

+0

Вы имеете в виду 'Select current_state, count (*) From PurchaseRequest Group By current_state'? – AlexS

+0

@AlexS да, это именно то, что я имел в виду. –

ответ

1

Попробуйте это:

Criteria criteriaPurchaseRequest=this.session.createCriteria(PurchaseRequest.class); 

ProjectionList projectionList = Projections.projectionList(); 
projectionList.add(Projections.groupProperty("current_state")); 
projectionList.add(Projections.rowCount()); 

criteriaPurchaseRequest.setProjection(projectionList); 

List results = criteriaPurchaseRequest.list(); 

Чтобы получить результаты:

List results = criteriaPurchaseRequest.list(); 
Map currentStateMap = new HashMap(); 
Iterator it=results.iterator(); 
while (it.hasNext()){ 
Object obj[]=(Object[])it.next();   
    CurrentState currentState = (CurrentState)obj[0]; 
    currentStateMap .put(currentState.getDescription().toLowerCase(), (Integer)obj[1]); 
} 

где CurrentState это объект, который представляет собой столбец current_state (помните, Hibernate работает с объектами).

+0

Что мне нужно, чтобы придать результаты inorder, чтобы получить сумму? –

+0

Вы можете попробовать этот запрос: «Выберите current_state, sum (amount), count (*) From PurchaseRequest Group По current_state, amount«? – esmoreno

+0

Простите, я имел в виду счет. То, что у вас есть, кажется правильным, я просто не уверен, как заставить его отображать счетчик из результатов. Если я выдержу groupProperty, я могу отбросить его до Long, но ломается, если я добавлю группу обратно, я предполагаю, что она вернет состояние с подсчетом и ему нужно будет создать какой-то объект, где он может быть отброшен к. Просто не уверен, что такое групповое свойство. –

Смежные вопросы