出现no session or session was closed这样的异常不多解释了,网上已经一大堆。
但还是提不推荐把延迟加载特性去掉,而是必要时自己采取办法得到想要的对象。这样做更加灵活和效率高。虽然是避免不了一些代码量。
之前采取的方案是在session未关闭之前,把其他表对象查询出来并且clone。不过现在无意中发现其实hibernate其实已经提供初始化的方法了,而未必自己去clone了。具体就是利用Hibernate.initialize() 这个方法。
例子如下:
/**
* 获取Prescription中其他扩展属性对象。
*
* @param result
*/
private void initializeProperties(PaginationSupport<Prescription> result) {
List<Prescription> items = result.getItems();
if (items != null && !items.isEmpty()) {
List<Prescription> persistenceList = new ArrayList<Prescription>(
items.size());
for (Prescription prescription : items) {
Hibernate.initialize(prescription.getOffice());
Hibernate.initialize(prescription.getDoctor());
Hibernate.initialize(prescription.getDoctor().getOffice());
Hibernate.initialize(prescription.getHospitalDistrict());
Hibernate.initialize(prescription.getPatient());
persistenceList.add(prescription);
}
result.setItems(persistenceList);
}
}
另还有种方法是采取spring的OpenSessionInViewFilter方法,把session关闭延迟到view层。不过我老是没配成功 - - view层get扩展表对象时还是提示no session。再说了还是觉得这样的消耗有点大,因为把所有查询的session关闭时间都加大了。很多时候只是某些查询需要得到扩展表对象而已,没必要把全部查询都影响到吧。
分享到:
相关推荐
at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:225) at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService...
解决org.hibernate.LazyInitializationException: could not initialize proxy - no Session...
NULL 博文链接:https://fkshl.iteye.com/blog/1178391
Ajax-jquery.initialize.zip,用于动态创建元素初始化的jquery插件(几年前很好,在2019年 考虑react或其他东西而不是jquery),ajax代表异步javascript和xml。它是多种web技术的集合,包括html、css、json、xml和...
延迟加载类Lazy的使用示例。
import org.hibernate.Session; import org.hibernate.cfg.Configuration; /** * Configures and provides access to Hibernate sessions, tied to the * current thread of execution. Follows the Thread Local...
jquery.initialize 1.4.0 1.4.0 之前的最新更新:添加了子元素数据绑定。 最新更新至 1.3.0:数据属性、模板属性和字符串模板替换。 一个简单的 jQuery 元素初始值设定项上下文插件。 该插件使元素初始化并将定义...
初始化数组,对于在VC++编译环境下,该代码是非常有帮助的,可以让读者快速学习数组的应用。
\\.\Global\vmx86虚拟机启动过程中,报这种错误,然后启动不了。 本文档可以很好的解决这个问题。
XP系统在回放LoadRunner11录制脚本时提示“Vuser failed to initialize extension LrXml.dll”的解决方法
NULL 博文链接:https://smartgwt.iteye.com/blog/1252268
主要介绍了Plsql Developer连接Oracle时出现Could not initialize oci.dll解决方案,需要的朋友可以参考下
经过呕心沥血的一天一夜,终于搞定SmartUpload组件的所有中文问题,为大家去除有史以来最头痛的中文问题,包括中文参数,中文文件名上传后服务器端文件名乱码问题,以及中文文件名下载问题。 这是我的中文解决终极...
之前编译安装的LNMP环境+phpmyamdin4.02的版本,今天突然出现这个问题:复制代码 代码如下:Fatal error: session_start(): Failed to initialize storage module: files (path: ) in /data/...第一反应就是查看php.ini...
Fatal error: session_start() [function.session-start]: Failed to initialize storage module: files (path: ) in C:\usr\phpMyAdmin\libraries\session.inc.php on line 75 I.更改服务器配置: 1、检查error.log...
中文说明在这里 TEmptyView Just a Wheel—— A easier way to setEmptyView. Without having to write xml file every time. It supports AdapterView(ListView,GridView,etc) and ... .setEmptyText("NO DATA")
完美解决“换另一台电脑上用VS2008继续开发web项目时出现 “System.Runtime.InteropServices.COMException”,然后是加载不了项目。” 只需要打开项目配置文件*.csproj,将<UseIIS>True</UseIIS> 改为 False,然后...
C生成静态库给C++调用出现undefined reference to ...解决方案 已经写好makefile,还有头文件,看注释,基本没问题的
instantclient-basic-windows.x64-11.2.0.4.0
sexylightbox插件是lightbox繁衍而来,但它比lightbox更性感、更轻。演示地址:http://www.jq22.com/jquery-info535