0

我正在尝试使用 jasper 插件生成 doc 格式的报告,异常在以下位置生成:

JasperReportDef report = jasperService.buildReportDefinition(params, request.getLocale(), result) 

我的控制器中的线路

例外:

could not initialize proxy - no Session. Stacktrace follows:
org.hibernate.LazyInitializationException: could not initialize proxy - no Session
at   org.apache.commons.beanutils.PropertyUtilsBean.invokeMethod(PropertyUtilsBean.java:2170)
at org.apache.commons.beanutils.PropertyUtilsBean.getSimpleProperty(PropertyUtilsBean.java:1332)
at org.apache.commons.beanutils.PropertyUtilsBean.getNestedProperty(PropertyUtilsBean.java:770)
at org.apache.commons.beanutils.PropertyUtilsBean.getProperty(PropertyUtilsBean.java:846)
at org.apache.commons.beanutils.PropertyUtils.getProperty(PropertyUtils.java:426)
at net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getBeanProperty(JRAbstractBeanDataSource.java:111)
at net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getFieldValue(JRAbstractBeanDataSource.java:96)
at net.sf.jasperreports.engine.data.JRBeanCollectionDataSource.getFieldValue(JRBeanCollectionDataSource.java:100)
at net.sf.jasperreports.engine.fill.JRFillDataset.setOldValues(JRFillDataset.java:1317)
at net.sf.jasperreports.engine.fill.JRFillDataset.next(JRFillDataset.java:1218)
at net.sf.jasperreports.engine.fill.JRFillDataset.next(JRFillDataset.java:1194)
at net.sf.jasperreports.engine.fill.JRBaseFiller.next(JRBaseFiller.java:1544)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:142)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:909)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:841)
at net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:88)
at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:653)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:969)
at com.cvsurgeon.DownloadCVController$_closure3.doCall(DownloadCVController.groovy:563)
at grails.plugin.cache.web.filter.PageFragmentCachingFilter.doFilter(PageFragmentCachingFilter.java:195)
at grails.plugin.cache.web.filter.AbstractFilter.doFilter(AbstractFilter.java:63)
at java.lang.Thread.run(Thread.java:662)

我用谷歌搜索并找到了一些替代方法,但不适用于我的情况,例如: 如何将 jasperreports 子报告与 grails jasper 插件一起使用?

任何帮助将不胜感激。

4

1 回答 1

0

恕我直言,问题是您正在使用由域对象组成的数据填充报告。

这些域对象的某些属性在生成报告时被延迟加载,但 Session 不可用,因此出现错误。

我看到了三种可能的解决方案:

  1. 在服务而不是控制器中调用 jasperService.buildReportDefinition - 会话应该在那里可用。

  2. 不要使用域对象来填充报告,而是将必要的数据复制到 DTO 并使用它。

  3. 确定哪些属性是延迟加载的,并改为热切加载 - 请参阅http://grails.org/doc/latest/guide/GORM.html#fetching

于 2014-04-24T07:39:26.360 回答