JasperReports 4.1 + Hibernate 3.6 java.lang.NoSuchFieldError:BOOLEAN

时间:2011-09-23 16:04:27

标签: hibernate jasper-reports

当我试图调用iReport 4.1.1中的报告时,我收到错误。

        Session sax = HibernateUtil.getSessionFactory().openSession();
        Transaction transaction = sax.beginTransaction();


        Map<String, Object> map = new HashMap<String, Object>();
        map.put(JRHibernateQueryExecuterFactory.PARAMETER_HIBERNATE_SESSION, sax);
        //map.put(, session);



        String relativeWebPath = "/reports/factura_template1.jasper";
        String absoluteDiskPath = getServletContext().getRealPath(relativeWebPath);

        JasperPrint print = JasperFillManager.fillReport(new FileInputStream(new File(absoluteDiskPath)),map);
        byte[] report = JasperExportManager.exportReportToPdf(print);

我们正在使用Hibernate 3.6(JPA Annotations)和Jasperreports 4.1.1作为报告引擎,当我尝试调用报告时,我得到了这个例外:

java.lang.NoSuchFieldError: BOOLEAN
at net.sf.jasperreports.engine.query.JRHibernateQueryExecuter.<clinit>(JRHibernateQueryExecuter.java:70)
at net.sf.jasperreports.engine.query.JRHibernateQueryExecuterFactory.createQueryExecuter(JRHibernateQueryExecuterFactory.java:136)
at net.sf.jasperreports.engine.fill.JRFillDataset.createQueryDatasource(JRFillDataset.java:724)
at net.sf.jasperreports.engine.fill.JRFillDataset.initDatasource(JRFillDataset.java:625)
at net.sf.jasperreports.engine.fill.JRBaseFiller.setParameters(JRBaseFiller.java:1238)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:869)
at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:118)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:435)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:398)
at mx.com.facture.FactureApp.server.ReportExporter.ServletExporter.doGet(ServletExporter.java:198)

还有其他人遇到过这个问题吗?你是怎么解决的?

谢谢。

2 个答案:

答案 0 :(得分:4)

即使我得到同样的错误...... 这是因为Hibernate 3.6已经弃用了“org.hibernate.Hibernate.BOOLEAN”(以及其他类似的类型)。 他们已将所有类型合并为“org.hibernate.type.StandardBasicTypes”类。

解决方案

解决方案很简单。

1)从JasperReports主页下载整个(带源代码)jasper tar.gz文件

2)解压缩文件(让该位置称为$ JASPER_SOURCE)

3)VIM $ JASPER_SOURCE / SRC /净/ SF / JasperReports的/发动机/查询/ JRHibernateQueryExecuter.java

4)在顶部导入语句中添加以下行

import org.hibernate.type.StandardBasicTypes;

5)现在从第71行开始将所有“Hibernate”更改为“StandardBasicTypes”(直到静态块结束,直到第84行)

6)保存并退出编辑器

7)将最新的hibernate3.jar(3.6.x版本)复制到“$ JASPER_SOURCE / lib”位置

8)现在从$ JASPER_SOURCE位置

执行以下ant命令

ant jar

您将在lib / jasperreports-4.x.x.jar位置获得修改后的jar。将jar用于您的项目

---------------或-------------------

另一个解决方案是在项目中使用旧的hibernate3.jar文件(版本3.0.x)

答案 1 :(得分:2)

将现有的hibernate3.jar替换为JasperReports包中存在的hibernate3.jar。