Java net.sf.jasperreports.engine.JRException:从bean:fullname检索字段值时出错。使用NativeQuery时

Java net.sf.jasperreports.engine.JRException:从bean:fullname检索字段值时出错。使用NativeQuery时,java,hibernate,jasper-reports,Java,Hibernate,Jasper Reports,获取: net.sf.jasperreports.engine.JRException: Error retrieving field value from bean: fullname. 仅当将Hibernate中的NativeQuery与JasperReports一起使用时 当我使用JPA标准查询时,就没有问题了 JPA标准 try (Session session = sessionFactory.openSession()) { CriteriaBuilder criteria

获取:

net.sf.jasperreports.engine.JRException: Error retrieving field value from bean: fullname.
仅当将
Hibernate
中的
NativeQuery
JasperReports
一起使用时

当我使用JPA标准查询时,就没有问题了

JPA标准

try (Session session = sessionFactory.openSession()) {
    CriteriaBuilder criteriaBuilder = session.getCriteriaBuilder();
    CriteriaQuery Client criteriaQuery = criteriaBuilder.createQuery(Client.class);
    Root root = criteriaQuery.from(Client.class);
    criteriaQuery.where(criteriaBuilder.equal(root.get("id"), id));
    return session.createQuery(criteriaQuery).getResultList();
}
但是当我使用NativeQuery时,我会面对
net.sf.jasperreports.engine.jr异常:从bean:fullname检索字段值时出错。

本机查询:

我已经从Jasper JRXML中的字段中删除了

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="Quotation" pageWidth="595" pageHeight="600" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="3954e5eb-656a-454e-b9e5-35f7e5262d48">
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
    <property name="ireport.zoom" value="1.0"/>
    <property name="ireport.x" value="0"/>
    <property name="ireport.y" value="0"/>
    <field name="fullname" class="java.lang.String"/>
    <field name="mobile" class="java.lang.String"/>
    <field name="city" class="java.lang.String"/>
    <field name="address" class="java.lang.String"/>
    <field name="quotationNo" class="java.lang.String"/>
    <field name="valid" class="java.lang.String"/>
    <field name="product.description" class="java.lang.String"/>
    <field name="product.cost" class="java.lang.String"/>
    <field name="product.name" class="java.lang.String"/>
我还尝试在
newjrbeancollectiondatasource(collection,false)中传递和删除false参数如下所示

new JRBeanColllectionDataSource(collection);  
传递
“false”参数
仅适用于
JPA条件
对于
本机查询
不管参数是否传递

net.sf.jasperreports.engine.JRException: Error retrieving field value from bean: fullname.   
我正在尝试
NativeQuery
来提高
JasperReport
的速度,这是针对我前面的问题提出的建议

所以我想要的解决方案是这个问题还是我前面的问题

您的查询是
从…
中选择c.*,p.*,因此Hibernate返回一个包含两个元素的数组列表:第一个元素是
客户端
,第二个元素是
产品

即使已编译,查询的结果也不是
列表


在发送到Jasperreports之前,您需要将该数组列表转换为
客户端列表

非常感谢您,我之前已经注意到了这一点,但无论我以何种方式获取数据以填充报告,第一次延迟约27秒,第二次延迟约5、4、2秒,有时0秒。如果你知道原因,请分享。我不确定你到底在做什么,但我怀疑问题不在Hibernate查询中。尝试测量首先运行查询所需的实际时间。在第一个报告上花费的27秒可能是初始化某些东西,例如Hibernate SessionFactory,我确定它是初始化jasper报告,但不知道是哪一部分。当我点击按钮获取1000条记录时,它不会像jasper报告的那样延迟太多。SessionFactory我使用singletone类启动,因此SessionFatory没有问题。我启用了
hibernate。生成统计数据
query在纳秒内执行,因此非常确定这是jasper report的问题:-(
new JRBeanColllectionDataSource(collection);  
net.sf.jasperreports.engine.JRException: Error retrieving field value from bean: fullname.