Java jasperreports 5.6.0和Hibernate 4 NoSuchFieldError:布尔值
我正在使用spring、hibernate和jasperreports基于maven构建web应用程序 下面是applicationContext.xml文件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}" />
<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);
...