如何在单个报表中显示多个表(POJO)中的数据

时间:2013-06-03 10:47:02

标签: spring-mvc jasper-reports

我正在使用 Spring 3 iReport JasperReports 4.5.0 来生成报告。我有三张桌子如下。

表名 字段
DN 日期
DNProd prodName,prodQty
DNPay cost,totalCost

问题是我需要在单个报告中显示 date,prodName,prodQty,cost,totalCost 字段。但这些指向不同的 POJO 类。我在谷歌搜索了这个并找到了一些解决方案,比如使用子报告。 但由于我是这些报告的新手,我不知道这是否是正确的解决方案。如果可能的话,任何人都可以指出我正确的方向。

1 个答案:

答案 0 :(得分:0)

根据我的建议,DynamicJasper最适合您的情况。 您需要正确和HQL,它将从相应的POJO中获得您在问题中描述的所有字段并具有适当的连接。

执行此HQL时,您将获得List。您必须传递给DynamicJasper才能为您构建报告。它将自动从pojo字段名称中获取列名。

下面是相同的例子。

Session session = null;
        try {
            SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
            session = sessionFactory.openSession();
            session.beginTransaction();

            List list = session.createQuery("from Employee").list();

            session.getTransaction().commit();

            DynamicReport dynamicReport = new ReflectiveReportBuilder(list).build();
            dynamicReport.setTitle("List of Employees");
            JasperPrint jasperPrint = DynamicJasperHelper.generateJasperPrint(dynamicReport, new ClassicLayoutManager(), list);
            JasperViewer.viewReport(jasperPrint);
            JasperExportManager.exportReportToPdfFile(jasperPrint, "C:\\TestDynamicJasper.pdf"); 
            resp.getWriter().write("Welcome to Show Report");
            resp.getWriter().flush();
            resp.getWriter().close();
        } catch (JRException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ColumnBuilderException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        } finally {
            if(session != null)
                session.close();
        }

希望这会对你有所帮助。 :)