使用JRBeanCollectionDataSource

时间:2012-11-02 13:21:46

标签: jasper-reports jpa-2.0

我正在使用ireport-4.5.0生成报告。我正在使用JRBeanCollectionDatasource。对于这个数据源,我发送了对象列表。我正在使用JPA查询来获取结果列表。

在此查询中,如果我提供SELECT m from mobile m它正常工作并生成报告,但如果我提供SELECT m.title,m.gender from mobile m则它会给出异常。它无法找到属性。

如何解决此问题?谁能告诉我如何解决这个问题?这么多天我在这里被打动了。抱歉我的英语不好。

提前致谢。

1 个答案:

答案 0 :(得分:2)

你的第二个查询返回一个bean集合,而是一个数组集合(Object []),它们都有两个元素:title和gender。该数组没有属性(您无法在其上调用getGender的{​​{1}}),因此也是异常。

您有大量的解决方案:

  • 编写一个只有两个属性的简单bean(例如TitleGener):gender和title。它还应该有一个初始化它们的构造函数。然后将您的JPA查询更改为:getTitle。这样,您将获得实际具有所需属性的bean集合。这是最快的解决方法。

  • 根本不要SELECT new my.utils.TitleGender(m.title,m.gender) from mobile m,只需使用标准的JDBC数据源。你好像不明白JPA是如何工作的,所以你是否需要它是值得怀疑的。这是 - 在我看来 - 最好的选择。

  • 编写一个包装Object []的简单,专用的JRBeanCollectionDataSource。该接口只有两个方法,并且易于实现 - 主要点是从属性名称到其索引int Object []的转换,在您的情况下,转换将是硬编码的。这就是我要做的。