快速业务通道

spring在MVC层解决JPA的缓迟加载问题 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-25
的事务是配置在service层的,因此在执行service.queryDirsByConditions方法完成后就关闭了事务。因此运行程序就会出现类似下面的错误信息:

2007-03-28 00:39:35,750 ERROR [org.hibernate.LazyInitializationException] - failed to lazily initialize a collection of role: com.easyjf.cms.domain.NewsDir.children, no session or session was closedorg.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.easyjf.cms.domain.NewsDir.children, no session or session was closedat org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:358)at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:350)at org.hibernate.collection.AbstractPersistentCollection.readSize(AbstractPersistentCollection.java:97)

使用其它的mvc如struts、webwork乃至spring mvc都会有这样的问题,问题的核心是在事务启动及结束上,由于我们都习惯于在service层而非mvc配置及使用事务,导致了这样的问题。解决的办法其实很简单,就是把事务的启动放到mvc层,让mvc层的controller来开启事务,而让业务层的方法加入的事务中。比如,在EasyJWeb中,可以通过如下的配置来实现实现在action中开启事务:在Spring配置文件中配置EasyJWeb的核心处理器,并把process方法添加到事务中,配置文件如下:

<aop:config><aop:pointcut id="easyjwebProcessor"expression="execution(* com.easyjf.web.RequestProcessor.process(..))" /><aop:advisor advice-ref="txEasyjwebProcessorAdvice"pointcut-ref="easyjwebProcessor" /></aop:config><tx:advice id="txEasyjwebProcessorAdvice"transaction-manager="transactionManager"><tx:attributes><tx:method name="*" propagation="REQUIRED" read-only="true" /></tx:attributes></tx:advice><bean name="EasyJWeb-Processor" class="com.easyjf.web.core.DefaultRequestProcessor"/>只需要这样简单的配置,你会惊奇的发现,所有缓迟加载及其它由Persitence Context无效而引起的问题均解决了。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号