Java jasperreports 5.6.0和Hibernate 4 NoSuchFieldError:布尔值

Java jasperreports 5.6.0和Hibernate 4 NoSuchFieldError:布尔值,java,hibernate,jasper-reports,Java,Hibernate,Jasper Reports,我正在使用spring、hibernate和jasperreports基于maven构建web应用程序 下面是applicationContext.xml文件 <bean id="myDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="${driverBinder}" />

我正在使用spring、hibernate和jasperreports基于maven构建web应用程序

下面是applicationContext.xml文件

<bean id="myDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="${driverBinder}" />
    <property name="url" value="${urlBinder}" />
    <property name="username" value="${usernameBinder}" />
    <property name="password" value="${passwordBinder}" />
</bean>

<bean id="mySessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
            <property name="dataSource" ref="myDataSource"/>

    <property name="annotatedClasses">
        <list>
        ...
        </list>
    </property>

    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">${dialectBinder}</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.hbm2ddl.auto">update</prop>
        </props>
    </property>
</bean>

...
${方言绑定器}
真的
更新
生成报告的Java类

@Controller
public class DefaultGenerator extends AbstractView {

    @Autowired
    @Qualifier("mySessionFactory")
    protected SessionFactory sessionFactory;
    private static Session session;
    private static Transaction transaction;

    private static OutputStream outputStream;
    private static JasperPrint jasperPrint;

    @Override
    protected void renderMergedOutputModel(Map<String, Object> model, HttpServletRequest request, HttpServletResponse response) throws Exception {

        session = sessionFactory.openSession();
        transaction = session.beginTransaction();

        outputStream = response.getOutputStream();
        HashMap parameters = (HashMap) model.get("parameters");

        parameters.put(JRHibernateQueryExecuterFactory.PARAMETER_HIBERNATE_SESSION, session);

        URL reportTemplate = getClass().getClassLoader().getResource("someFile.jrxml");
        JasperReport jasperReport = JasperCompileManager.compileReport(reportTemplate.getPath());
        jasperPrint = JasperFillManager.fillReport(jasperReport, parameters);

        transaction.rollback();
        session.close();

        render(new JRPdfExporter());
    }

    private void render(Exporter exporter) throws JRException {
        List<JasperPrint> jasperPrintList = new ArrayList<>();
        jasperPrintList.add(jasperPrint);
        exporter.setExporterInput(SimpleExporterInput.getInstance(jasperPrintList));
        exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(outputStream));
        exporter.exportReport();
    }
}
@控制器
公共类DefaultGenerator扩展了AbstractView{
@自动连线
@限定符(“mySessionFactory”)
受保护的SessionFactory SessionFactory;
非公开静态会议;
私人静态交易;
私有静态OutputStream OutputStream;
私人静态茉莉花;
@凌驾
受保护的void RenderMergeDoutpModel(映射模型、HttpServletRequest请求、HttpServletResponse响应)引发异常{
session=sessionFactory.openSession();
事务=session.beginTransaction();
outputStream=response.getOutputStream();
HashMap参数=(HashMap)model.get(“参数”);
parameters.put(JRHibernateQueryExecuterFactory.PARAMETER\u HIBERNATE\u会话,会话);
URL reportTemplate=getClass().getClassLoader().getResource(“someFile.jrxml”);
JasperReport-JasperReport=JasperCompileManager.compileReport(reportTemplate.getPath());
jasperPrint=JasperFillManager.fillReport(jasperReport,参数);
transaction.rollback();
session.close();
render(新的JRPdfExporter());
}
私有void呈现(导出器导出器)引发异常{
List jasperPrintList=newarraylist();
jasperPrintList.add(jasperPrint);
setExporterInput(SimpleExporterInput.getInstance(jasperPrintList));
exporter.setExporterOutput(新的SimpleOutputStreamExportRoutPut(outputStream));
出口商。出口报告();
}
}
什么也没发生。我正在变成一个错误-java.lang.NoSuchFieldError:BOOLEAN。 这里也有描述- 看起来从Hibernate的3.6版开始,就不再有布尔类了。但是jasperreports尝试使用它

谁能帮我一个忙,告诉我怎么做,尽可能简单?我正在使用Maven,所以我的团队成员可能会更新库一次,所以我不想重新编译jasperreports库之类的东西

谢谢。

这里写着Like

其中一个专门用于数据访问的中间层工具是Hibernate(今天的Hibernate 3.3)(…)

。。。最新的jasperreports 5.6是否认为hibernate的实际版本是3.3而不是4.3?哦


两周的解决方案工作,一无所获:/

来自jasperreports 5.6.0 pom

    ...
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate</artifactId>
        <version>3.0.5</version>
        <scope>compile</scope>
        <exclusions>
            <exclusion>
                <groupId>javax.transaction</groupId>
                <artifactId>jta</artifactId>
            </exclusion>
        </exclusions>
        <optional>true</optional>
    </dependency>
    ...
。。。
org.hibernate
在JasperReports开发树中

我相信您需要支持更新的hibernate版本

该变更于2015年6月提交

如果你看看mvnrepository.com上的版本,你会发现6.1.1是maven的第一个版本,其中可能包含使用hibernate新版本所需的更改


我刚刚尝试将5.6.0(以及6.1.0)与Hibernate4一起使用,并复制了您的错误。然后我尝试使用6.1.1,错误消失了。

仍在寻求帮助:(
import org.hibernate.Hibernate;
import org.hibernate.Query;
import org.hibernate.ScrollMode;
import org.hibernate.ScrollableResults;
import org.hibernate.Session;
import org.hibernate.type.Type;

/**
 * HQL query executer that uses Hibernate 3.
 * 
 * @author Lucian Chirita (lucianc@users.sourceforge.net)
 * @version $Id: JRHibernateQueryExecuter.java 7199 2014-08-27 13:58:10Z teodord $
 */
public class JRHibernateQueryExecuter extends JRAbstractQueryExecuter
{
    private static final Log log = LogFactory.getLog(JRHibernateQueryExecuter.class);

    protected static final String CANONICAL_LANGUAGE = "HQL";

    private static final Map<Class<?>,Type> hibernateTypeMap;

    static
    {
        hibernateTypeMap = new HashMap<Class<?>,Type>();
        hibernateTypeMap.put(Boolean.class, Hibernate.BOOLEAN);
        hibernateTypeMap.put(Byte.class, Hibernate.BYTE);
        hibernateTypeMap.put(Double.class, Hibernate.DOUBLE);
        hibernateTypeMap.put(Float.class, Hibernate.FLOAT);
        hibernateTypeMap.put(Integer.class, Hibernate.INTEGER);
        ...