2013-04-02 26 views
0

在MYSQL我有這個疑問:
如何在JPA-Hibernate中執行透視查詢?

我的表

 

    planning 
    ------------------- 
    process_id (int) 
    project_id (int) 
    period (datetime) 
    total_hour (double) 

 

    SELECT process_id, project_id, 
    sum(if (period="2013-04-01 00:00:00",total_hour,0)) as april, 
    sum(if (period="2013-05-01 00:00:00",total_hour,0)) as may, 
    sum(if (period="2013-06-01 00:00:00",total_hour,0)) as june 
    FROM planning 
    GROUP BY process_id,project_id; 

我需要轉換這個clausule SQL在JPA使用?

回答

4

SQL到JPQL

SELECT p.process_id, p.project_id, 
sum(case when p.period="2013-04-01 00:00:00" then p.total_hour else 0 end) as april, 
sum(case when p.period="2013-05-01 00:00:00" then p.total_hour else 0 end) as may, 
sum(case when p.period="2013-06-01 00:00:00" then p.total_hour else 0 end) as june, 
FROM Planning p 
GROUP BY p.process_id, p.project_id; 

但你仍然可以使用本機查詢過。

要映射的結果集:您可以將結果集(如果你喜歡用推土機)手動映射到一個新的bean,或者你可以使用一些@SqlResultSetMapping看到How to select multiple columns with the same name using JPA native query?

+0

如何添加結果設置爲新的對象(例如: PlanningExtractBean.class),因爲源Bean與結果集不同。 –

+0

我更新了答案。 – willome

+0

謝謝。這個例子對我的系統是正確的。 –