2014-01-23 123 views
0

如何簡化此查詢,只運行一次。 我當前的代碼:MySQL EntityManager範圍查詢

int year = 2014; 

    Query q = entityManager.createQuery("SELECT SUM(s.revenue),SUM(s.mediaSpending),SUM(s.grossProfit) FROM Sale s WHERE YEAR(s.date) = :year AND QUARTER(s.date) = :quarter"); 
    q.setParameter("year", year); 

    q.setParameter("quarter", 1); 
    Object[] q1 = (Object[]) q.getSingleResult(); 

    q.setParameter("quarter", 2); 
    Object[] q2 = (Object[]) q.getSingleResult(); 

    q.setParameter("quarter", 3); 
    Object[] q3 = (Object[]) q.getSingleResult(); 

    q.setParameter("quarter", 4); 
    Object[] q4 = (Object[]) q.getSingleResult(); 

我可以以某種方式查詢列表中的所有4 qartal一次? 事情是這樣的:

Query q = entityManager.createQuery("SELECT SUM(s.revenue),SUM(s.mediaSpending),SUM(s.grossProfit) FROM Sale s WHERE YEAR(s.date) = :year AND QUARTER(s.date) = ???(1-4)"); 

List<Object[]> q1 = q.getResultList(); 

編輯: 結果應該是4對象的列表:

List{Q1Statistic, Q2Statistic, Q3Statistic, Q4Statistic} 

回答

1

是的,你可以試試下面的代碼

Session session = entityManager.unwrap(Session.class); 
Query query = session.createQuery("SELECT SUM(s.revenue),SUM(s.mediaSpending),SUM(s.grossProfit) FROM Sale s WHERE YEAR(s.date) = :year AND QUARTER(s.date) = :quarter"); 
query.setParameter("year", year); 
query.setParameter("quarter", 1); 
List<Object[]> result = query.list(); 

也看看Hibernate SessionFactory vs. EntityManagerFactory

編輯

它接縫像問題是在你的查詢嘗試下面的查詢希望這有助於你

QUERY

SELECT SUM(s.revenue),SUM(s.mediaSpending),SUM(s.grossProfit) FROM Sale s 
WHERE YEAR(s.date) = :year 
GROUP BY YEAR(s.date) , QUARTER(s.date)