【问题标题】:Hibernate: Generating Reports (Stored pocedures)Hibernate:生成报告(存储过程)
【发布时间】:2012-07-17 10:25:03
【问题描述】:

我正在使用 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。

存储过程是要走的路吗???

谢谢!!

【问题讨论】:

    标签: java oracle hibernate jpa stored-procedures


    【解决方案1】:

    对于报告,您可以使用JasperReports (PDF) 或 Apache POI(MS 文档,例如 MS Excel)

    问候。

    【讨论】:

    • 我知道 API 的。你能详细说明我为什么要使用这些吗?
    【解决方案2】:

    您需要两种技术:

    • 检索和计算数据的东西
    • 创建可视化的东西

    (+可选的一些调度机制,用于每隔一段时间自动生成报告)

    数据检索

    我强烈反对使用 JPA 和 Java 代码来组装数据,因为这通常会很慢,除非只有少量数据。

    如果您在应用程序中使用 JPA,我会首先尝试使用 JPA 视图对象 + JPA 调整(通过配置文件/注释)。

    如果这不起作用,请回退到本机 JDBC。

    我的博客中有关此主题的更多信息:JPA Query result as a POJO

    如果连 JDBC 都太慢,我只会考虑存储过程(更难编写、版本、与您的应用保持同步等)

    可视化

    如果您可以利用所提供的整个工具链(加载数据的 ETL、报表设计器工具、数据分析器、报表调度器等),那么 Pentaho BI 服务器(或类似产品)将最能受益。如果您只有几份报告并且这些报告不会很快改变,那么我会坚持使用 Java 解决方案。

    【讨论】:

    • 只需阅读博客文章 - 使用 Hibernate,您可以使用结果转换器 - Transformer.ALIAS_TO_BEAN 轻松地将 List 转换为 POJO。对于某些报告,我们使用 SQLQuery 和映射到报告列的 bean。
    • API是query.setResultTransformer(Transformers.aliasToBean(ReportData.class));
    • 实际上,我当时尝试的是使用 resultClass 作为我的 POJO 调用 entityManager.createQuery(java.lang.String qlString, java.lang.Class resultClass) 而这个确实不行。很高兴知道如果有人使用 Hibernate API 有一个解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多