繁体   English   中英

Grails中的Jasper插件:org.hibernate.LazyInitializationException:无法初始化代理-没有会话

[英]Jasper plugin in Grails: org.hibernate.LazyInitializationException: could not initialize proxy - no Session

我正在尝试使用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)

我已经用谷歌搜索,找到了一些替代方法,但在我的情况下不起作用,例如: 如何在grails jasper插件中使用jasperreports子报告?

任何帮助将不胜感激。

恕我直言,问题是您要用包含域对象的数据填充报表。

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM