net.sf.jasperreports.engine.JRException:从 bean 检索字段值时出错:全名。使用 NativeQuery 时
net.sf.jasperreports.engine.JRException: Error retrieving field value from bean: fullname. When using NativeQuery
获得:
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.JRException: Error retrieving field value from bean: fullname.
本机查询:
try (Session session = sessionFactory.openSession()) {
List<Client> query = session.createNativeQuery("select c.*, p.*
from client c join product p on c.pid = p.id where c.id = :id")
.addEntity("c", Client.class).addJoin("p", "c.product")
.setParameter("id", id).list();
return query;
}
这里是 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"/>
Client.java:
public class Client implements java.io.Serializable {
private Integer id;
private Product product;
private String fullname;
private String business;
private String address;
private String city;
private String mobile;
private String addedBy;
private String date;
private String status;
private String quotationNo;
private String valid;
private String productName;
private Set orderses = new HashSet(0);
public String getFullname() {
return this.fullname;
}
public void setFullname(String fullname) {
this.fullname = fullname;
}
我已经从 Jasper JRXML 中的字段中删除
我还尝试在 new JRBeanColllectionDataSource(collection, false);
中传递和删除错误参数,如下所示,
new JRBeanColllectionDataSource(collection);
传递 "false" parameter
仅适用于 JPA criteria
对于 Native query
是否传递参数并不重要它给出
net.sf.jasperreports.engine.JRException: Error retrieving field value from bean: fullname.
我正在尝试 NativeQuery
提高 JasperReport
的速度,这是针对我之前的问题
提出的建议
所以我想要这个问题或我上一个问题的解决方案
Jasper Reports 6.14 filling and generating report is so slow [closed]
您的查询是 select c.*, p.* from ...
,因此 Hibernate returns 2 元素数组列表:第一个元素是 Client
,第二个元素是 Product
。
即使编译,查询结果也不是 List<Client>
。
您需要将该数组列表转换为 Client
列表,然后再将其发送到 Jasperreports
获得:
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.JRException: Error retrieving field value from bean: fullname.
本机查询:
try (Session session = sessionFactory.openSession()) {
List<Client> query = session.createNativeQuery("select c.*, p.*
from client c join product p on c.pid = p.id where c.id = :id")
.addEntity("c", Client.class).addJoin("p", "c.product")
.setParameter("id", id).list();
return query;
}
这里是 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"/>
Client.java:
public class Client implements java.io.Serializable {
private Integer id;
private Product product;
private String fullname;
private String business;
private String address;
private String city;
private String mobile;
private String addedBy;
private String date;
private String status;
private String quotationNo;
private String valid;
private String productName;
private Set orderses = new HashSet(0);
public String getFullname() {
return this.fullname;
}
public void setFullname(String fullname) {
this.fullname = fullname;
}
我已经从 Jasper JRXML 中的字段中删除
我还尝试在 new JRBeanColllectionDataSource(collection, false);
中传递和删除错误参数,如下所示,
new JRBeanColllectionDataSource(collection);
传递 "false" parameter
仅适用于 JPA criteria
对于 Native query
是否传递参数并不重要它给出
net.sf.jasperreports.engine.JRException: Error retrieving field value from bean: fullname.
我正在尝试 NativeQuery
提高 JasperReport
的速度,这是针对我之前的问题
所以我想要这个问题或我上一个问题的解决方案
Jasper Reports 6.14 filling and generating report is so slow [closed]
您的查询是 select c.*, p.* from ...
,因此 Hibernate returns 2 元素数组列表:第一个元素是 Client
,第二个元素是 Product
。
即使编译,查询结果也不是 List<Client>
。
您需要将该数组列表转换为 Client
列表,然后再将其发送到 Jasperreports