我正在编写HQL查询。根据我视图中的条件,我在SELECT
子句中添加选择(选择的数量从1到大约20)。在查询hibernate上使用list()
将返回对象数组的对象数组,至少我是这么认为的。如果我通过结果迭代
Iterator<Object[]> itr = result.iterator();
while(itr.hasNext()){
Object[] obj = (Object[]) itr.next();
System.out.println(obj); //1st
for (int br = 0; br <= obj.length-1;br ++) {
System.out.print(obj[br].toString() + ","); //2nd
}
}
第一个Sytsem.out prints
每个Object数组和第二个数组打印出他们的内容。对于测试输出到控制台是好的。
我尝试将结果用于Jasper Reports,并以某种方式无法访问每个Object数组的内容。有人可以给我建议或建议一种方法,比如将结果转换为我可以在报告中使用的格式。
答案 0 :(得分:2)
JRBeanCollectionDataSource假设bean的集合 - POJO类。然后它试图通过Jasper报告的字段名称找到该类的适当字段。
因此,如果在Jasper报告中您定义了一个字段&#39; userName&#39; JRBeanCollectionDataSource获取POJO类并尝试查找类&#39;字段&#39; userName&#39;。
在你的情况下,而不是POJO类,你得到数组Object []。因此无法找到名为&#39; userName&#39;。
的字段我建议定义DTO(数据传输对象)并将Object []转换为DTO。因此,您将拥有List,并且JRBeanCollectionDataSource可以解析正确的名称。
一种简单的方法是定义结果转换器。
.setResultTransformer( Transformers.aliasToBean(ResultsDTO.class))
另见this