我正在使用 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();
}
}
并没有发生任何事情。我遇到了一个错误 - java.lang.NoSuchFieldError: BOOLEAN。
这里也有描述——http://community.jaspersoft.com/questions/536345/jasperreports-376-and-hibernate-36-errors http://community.jaspersoft.com/questions/536345/jasperreports-376-and-hibernate-36-errors看起来从 Hibernate 3.6 版本开始就不再有 BOOLEAN 类了。但 jasperreports 尝试使用它......
任何人都可以帮助我并告诉我如何尽可能简单地做到这一点吗?我正在使用 Maven,所以我的队友可能会更新一次库,所以我不想重新编译 jasperreports 库等。
Thank.