Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JasperReports 6.4.0中使用Hibernate 5.2.8时,为什么会出现java.lang.NoSuchMethodError_Java_Spring_Hibernate_Jasper Reports_Nosuchmethoderror - Fatal编程技术网

在JasperReports 6.4.0中使用Hibernate 5.2.8时,为什么会出现java.lang.NoSuchMethodError

在JasperReports 6.4.0中使用Hibernate 5.2.8时,为什么会出现java.lang.NoSuchMethodError,java,spring,hibernate,jasper-reports,nosuchmethoderror,Java,Spring,Hibernate,Jasper Reports,Nosuchmethoderror,我正在开发使用ApacheTomcat、Spring和Hibernate的web应用程序项目。它还使用JasperReports v.6.4.0生成pdf报告。最近,Spring和Hibernate的版本从Spring的3.1.2更新为4.3.6,从Hibernate的3.3.1更新为5.2.8 迁移后出现的所有问题都得到了解决,只有一个例外。生成带有hql查询的报告时,会引发以下异常: java.lang.NoSuchMethodError: org.hibernate.Session.cre

我正在开发使用ApacheTomcat、Spring和Hibernate的web应用程序项目。它还使用JasperReports v.6.4.0生成pdf报告。最近,Spring和Hibernate的版本从Spring的3.1.2更新为4.3.6,从Hibernate的3.3.1更新为5.2.8

迁移后出现的所有问题都得到了解决,只有一个例外。生成带有hql查询的报告时,会引发以下异常:

java.lang.NoSuchMethodError: org.hibernate.Session.createQuery(Ljava/lang/String;)Lorg/hibernate/Query;
at net.sf.jasperreports.engine.query.JRHibernateQueryExecuter.createQuery(JRHibernateQueryExecuter.java:279)
at net.sf.jasperreports.engine.query.JRHibernateQueryExecuter.createDatasource(JRHibernateQueryExecuter.java:195)
at net.sf.jasperreports.engine.fill.JRFillDataset.createQueryDatasource(JRFillDataset.java:1245)
at net.sf.jasperreports.engine.fill.JRFillDataset.initDatasource(JRFillDataset.java:723)
at net.sf.jasperreports.engine.fill.BaseReportFiller.setParameters(BaseReportFiller.java:438)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:550)
at net.sf.jasperreports.engine.fill.BaseReportFiller.fill(BaseReportFiller.java:396)
at net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:90)
at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:456)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:863)
升级之前,JasperReports v.6.4.0与Hibernate v.3.3.1配合得很好。 有人能帮我避免这个问题吗

中的JRHibernateQueryExecuter

不同之处在于,在Hibernate 5.2中,查询类从org.Hibernate移动到org.Hibernate.Query

那么解决方案是什么呢

要使用JRHibernateQueryExecuter,您需要HibernateV。3.3.2类路径中,因此您要么返回,要么开发自己的JRHibernateQueryExecuter和依赖于Hibernate 5.2.8的JRHibernateQueryExecuterFactory

开发自己的JRHibernateQueryExecuter可能不像听起来那么困难,因为,您可能只需要调整导入

要注册新的QueryFactory,请参阅中的JRHibernateQueryExecuter

不同之处在于,在Hibernate 5.2中,查询类从org.Hibernate移动到org.Hibernate.Query

那么解决方案是什么呢

要使用JRHibernateQueryExecuter,您需要HibernateV。3.3.2类路径中,因此您要么返回,要么开发自己的JRHibernateQueryExecuter和依赖于Hibernate 5.2.8的JRHibernateQueryExecuterFactory

开发自己的JRHibernateQueryExecuter可能不像听起来那么困难,因为,您可能只需要调整导入


要注册新的QueryFactory,请参见:

我遵循了@PetterFriberg给出的建议,并编写了一个小库,使Hibernate 5与JasperReports 6结合使用成为可能

可在此处找到来源和说明:

我听从了@PetterFriberg的建议,编写了一个小库,可以将Hibernate 5与JasperReports 6结合使用

可在此处找到来源和说明:

一旦创建了自己版本的JRHibernateQueryExecuter&JRHibernateQueryExecuterFactory,就可以通过调用

JasperReportsContext jasperReportsContext = DefaultJasperReportsContext.getInstance();
JRPropertiesUtil jrPropertiesUtil = JRPropertiesUtil.getInstance(jasperReportsContext);
jrPropertiesUtil.setProperty("net.sf.jasperreports.query.executer.factory.hql", "net.sf.jasperreports.engine.query.h5.JRHibernateQueryExecuterFactory");
jrPropertiesUtil.setProperty("net.sf.jasperreports.query.executer.factory.HQL", "net.sf.jasperreports.engine.query.h5.JRHibernateQueryExecuterFactory");

我不知道为什么Jaspersoft自己没有实施修复。正确地开始支持更高版本的hibernate确实是一个简单的改变。

一旦创建了自己版本的JRHibernateQueryExecuter&JRHibernateQueryExecuterFactory,就可以通过调用

JasperReportsContext jasperReportsContext = DefaultJasperReportsContext.getInstance();
JRPropertiesUtil jrPropertiesUtil = JRPropertiesUtil.getInstance(jasperReportsContext);
jrPropertiesUtil.setProperty("net.sf.jasperreports.query.executer.factory.hql", "net.sf.jasperreports.engine.query.h5.JRHibernateQueryExecuterFactory");
jrPropertiesUtil.setProperty("net.sf.jasperreports.query.executer.factory.HQL", "net.sf.jasperreports.engine.query.h5.JRHibernateQueryExecuterFactory");

我不知道为什么Jaspersoft自己没有实施修复。正确地开始支持hibernate的较新版本确实是一个简单的改变。

@PetterFrisberg,谢谢你的回答,我一定会尝试开发我自己的JRHibernateQueryExecuterFactory,它与hibernate的较新版本兼容。@PetterFrisberg,谢谢你的回答,我一定会尝试开发我自己的JRHibernateQueryExecuterFactory,它与更新的Hibernate版本兼容。