2014-01-20 4 views
0
qty|price 
1 | 4 
4 | 5 
6 | 4 
2 | 3 
1 | 2 

- это записи в базе данных. Я пытаюсь получить результат: (количество групп по цене)ошибка агрегации java hibernate

qty|price 
7 | 4 
4 | 5 
2 | 3 
1 | 2 

Я успешна, когда я делаю этот запрос, используя sqlwave моего местного Databse

SELECT price, sum(quantity) FROM table

, но когда я пытаюсь это в Java/hibernate .. и попробуйте перечислить, я не получаю результаты для агрегации sum(). Я попробовал агрегацию .. но она дает мне сумму всех величин, а не по цене. Как я могу ограничить, чтобы получить сумму количества по конкретной цене?

Вот мой метод:

protected void listInventory(String productID) 
{ 
Session session = sessionFactory.openSession(); 
Transaction tx = null; 
try{ 
tx = session.beginTransaction(); 

Query query = session.createQuery("SELECT price, sum(quantity) FROM table WHERE product_code=:productID GROUP BY price"); 

query.setParameter("product_code",productID); 

List iv = query.list(); 
for(Iterator iterator = iv.iterator();iterator.hasNext();){ 
Products pb = (Products)iterator.next(); 
System.out.println("Price: "+pb.getPrice()); 
System.out.println("Quantity: " + pb.getQuantity()); 
} 
tx.commit(); 
}catch (HibernateException e) { 
     if (tx!=null) tx.rollback(); 
     e.printStackTrace(); 
    }finally { 
      session.close();serverWriter.flush(); 
     } 
} 
+0

Пожалуйста, ваши конкретные запрос HQL/JPQL и как вы читаете это, наряду с Hibernate сгенерированного SQL. – chrylis

+0

@chrylis обновлен. Я знаю, что pb.getQuantity() будет получать только количество для этой конкретной записи. Поэтому мне интересно, как я могу разместить агрегированную сумму qty для этой цены вместо нее. – user2556304

ответ

0

Если вы хотите, чтобы сумма количества по определенной цене, то вы синтаксически правильный SQL. Ваше выражение:

SELECT price, sum(quantity) as quantity 
FROM table; 

не правильно, потому что нет group by положения. Попробуйте это:

SELECT price, sum(quantity) as quantity 
FROM table 
GROUP BY price; 

Если вы хотите только результаты по одной цене:

SELECT sum(quantity) as quantity 
FROM table 
WHERE price = xxx; 
+0

цена сгруппирована, но количество не отображено – user2556304

+0

@ user2556304. , , Я не знаю, что такое 'pb.getQuantity()'. Возможно, исправление проблемы с помощью функции 'sum()' to 'quantity' будет устранено. –

+0

Что вы подразумеваете под суммой наложения количества? вы имеете в виду «AS», можете ли вы привести пример того, как это сделать? – user2556304

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