首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用JPA和JasperReports生成复杂报表

使用JPA和JasperReports生成复杂报表
EN

Stack Overflow用户
提问于 2010-10-01 01:45:10
回答 1查看 4.6K关注 0票数 2

我一直使用jasperreport和JPA进行报告,所有这些报告都只是“目录”,其中唯一的信息是一个实体,有时是一个实体及其相关实体。

现在我必须设计包含非常复杂的信息(分组、汇总、不属于实体的字段等等)的报表,这在我的实体中是不可能的(是的,我知道我可以修改我的设计,但我不认为这对我的应用程序有好处)。

我一直在考虑不同的替代方案,比如传递jdbc连接,即使这意味着要在我的类中创建方法来将此对象传递给视图(生成报告)。

另一个是创建另一个上下文(应用程序),它以自己的方式访问数据库(类似于BI),因此这个应用程序将与我原来的应用程序分开。

希望有人可以评论或给我一个更好的方式来实现这一点。

顺便说一下,我的框架是spring。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-10-01 05:25:48

我建议在生成复杂报告时使用JDBC连接选项,即使只是为了获得通过直接编写SQL获得的灵活性。但是在您的视图层中主动变更JDBC连接听起来并不好,因此在不太了解Spring的情况下,我建议将实际的报告生成下移到服务层,让它将JasperPrint对象(可序列化的)返回到视图层,在那里可以呈现它。

下面是一个简单的RMI示例,与我使用的方法大致相同。我想这可以转换成某种Spring bean。

代码语言:javascript
复制
public interface ReportService extends Remote {
  public JasperPrint fillReport(final JasperReport report, final Map reportParameters)throws RemoteException, JRException;
}

public class ReportServiceImpl implements ReportService {

  final Connection connection;

  public ReportServiceImpl(final Connection connection) {
    this.connection = connection;
  }

  public JasperPrint fillReport(final JasperReport report, final Map reportParameters) throws RemoteException, JRException {
    return JasperFillManager.fillReport(report, reportParameters, connection);
  }
}

出现在脑海中的一种修改是让fillReport方法接受报告名称或路径作为参数,而不是实际的JasperReport对象,并让服务层加载它(并对其进行缓存,因为加载报告是一项相对开销较大的操作)。

让我知道,如果你想让我充实这个例子的某些部分,我必须警告你,我是一名桌面/Swing程序员,在web前端方面只有基本的经验。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3833319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档