2012-07-18 45 views
2

我正在使用Hibernate(JPA 2.0),Spring 3.0.5和Oracle 11g的應用程序。休眠:生成報告(存儲的線索)

我需要基於數據庫中的許多表生成少量報表(CSV);

樣本報告CSV看起來是這樣的:

From_Date TO_Date  Group Metric  Mon  Tue  Wed  Thu Fri 

10/01/2012 10/02/2012 HP  Average 29  74  400  99  14 
10/02/2012 10/03/2012 HP  Average 81  19  22  108 07 
10/03/2012 10/04/2012 HP  Average 11  62  09  16  01 

10/01/2012 10/02/2012 HP  Total  924  452  915  100 940 
10/02/2012 10/03/2012 HP  Total  185  925  266  108 857 
10/03/2012 10/04/2012 HP  Total  173  201  907  675 169 

我的問題是這份報告將取決於許多表和不同的指標(平均,總計和百分比),什麼是向前的最好方式給定技術堆棧?

我目前沒有使用任何報告api。

存儲過程的方式去???

謝謝!

回答

1

對於報表,您可以使用JasperReports(PDF)或Apache POI(MS文檔,例如MS Excel)中

問候。

+0

我知道API的。請你詳細說明爲什麼我應該使用這些? – adi 2012-07-18 12:48:21

2

有高科技的兩件你需要:

  • 東西來檢索和計算數據
  • 東西以創建可視化

(+可選自動對一些調度機制間隔生成報告)

數據檢索

我強烈反對使用JPA和Java代碼來組裝數據,因爲這通常會很慢,除非只有少量數據。

如果您在您的應用程序中使用JPA,我首先嚐試使用JPA視圖對象+ JPA調整(通過配置文件/註釋)。

如果不能解決問題,請回退到原生JDBC。

更多關於這個話題在我的博客:JPA Query result as a POJO

如果連JDBC是太慢了,我只再考慮存儲過程(這是很難寫,版本保持同步,與您的應用程序等。 )

可視化

  • CSV您可以在Java中創建自己的文件,而無需費力
  • 對於一個適當的報告庫/工具包,請參閱Pentaho reportingJasperreports
  • 對於即席報告(不使用預定義模式進行重新報告,即aka。數據分析),我會推薦Pentaho business analytics

如果您可以利用提供的整個工具鏈(ETL加載數據,報表設計器工具,數據分析器,報表調度程序等),Pentaho BI服務器(或類似產品)主要受益於您。如果您只有幾個報告,並且這些報告不會很快改變,那麼我會堅持使用Java解決方案。

+1

只需閱讀博文 - 使用Hibernate,您可以使用結果轉換器--Transformer.ALIAS_TO_BEAN輕鬆地將List 轉換爲POJO。對於某些報告,我們使用一個SQLQuery和一個映射到報告列的bean。 – blank 2012-07-18 14:34:02

+0

我會檢查一下,謝謝! – 2012-07-18 14:56:43

+0

API是query.setResultTransformer(Transformers.aliasToBean(ReportData.class)); – blank 2012-07-18 14:59:23