我正在编写 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 打印
每个对象数组,第二个打印它们的内容。用于测试控制台的输出就可以了。
我尝试将结果用于 Jasper Reports,但不知何故无法访问每个对象数组的内容。有人可以给我建议或建议一种方法,例如将结果转换为我可以在报告中使用的格式。
最佳答案
JRBeanCollectionDataSource 假定 bean 的集合 - POJO 类。然后它尝试通过 Jasper 报告的字段名称找到该类的正确字段。
因此,如果在 Jasper Report 中定义字段“userName”,则 JRBeanCollectionDataSource 会获取 POJO 类并尝试查找该类字段“userName”。
在你的例子中,你得到的是数组 Object[],而不是 POJO 类。因此找不到名为“userName”的字段。
我建议定义DTO(数据传输对象)并将Object[]转换为DTO。因此,您将拥有 List,并且 JRBeanCollectionDataSource 可以解析正确的名称。
一个简单的方法是定义结果转换器。
.setResultTransformer( Transformers.aliasToBean(ResultsDTO.class))
另请参阅this
关于java - Hibernate HQL - query.list() 返回对象数组的对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33992956/