对于hibernate懒加载模式报错处理
来源:互联网 发布:安卓去广告软件 编辑:程序博客网 时间:2024/06/18 10:59
在开发项目的过程中碰到了一些和hibernate懒加载有关的错误,记录一下。
在实际开发中,我们常常会将两个表关联起来(设置外键),这在hibernate映射为对象时会变成两个对象关联(即一个对象有另一个对象的引用),这本来是一个非常好用的机制,但是因为hibernate的懒加载模式,导致我们开发过程中会遇到各种坑。
什么是懒加载模式:就是hibernate在查询数据库的时候会将非引用变量(没有外键的)正常查询出来,但是对于引用变量(外键),hibernate不会全部查询出来,而是放了个代理对象,在你要用到它的时候才去查询,减少开销。但是,问题就在这,我们每次查询结束都会把session给关了,然后在以后用到引用的对象时,hibernate发现session已经被关闭,就报了个错 session没找到的错误。
1.在jsp页面使用ognl或者el表达式取关联对象时报错
可以配置一个hibernate的过滤器,告诉hibernate什么时候request结束,将session的关闭延时到request请求结束。
<!-- 把session的关闭延迟到jsp页面显示之后,解决hibernate懒加载无问题,在配在struts2上面。--> <filter> <filter-name>openSessionInViewFilter</filter-name> <filter-class>org.springframework.orm.hibernate5.support.OpenSessionInViewFilter</filter-class> <init-param> <param-name>singleSession</param-name> <param-value>true</param-value> </init-param> </filter> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>openSessionInViewFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
2.ajax请求时,使用插件对对象进行序列化出错
这个问题发生的原因也是和上面的差不多,不过区别的是上面的配置无法解决这个问题,具体原因我也不知道,但是,我有一个比较笨的解决办法:可以给不需要的数据的getter方法设置注解@JSON(serialize = false),这样就不会将该属性序列化。对必须要用的数据又是引用变量的关闭懒加载模式@ManyToOne(fetch = FetchType.EAGER)
阅读全文
0 0
- 对于hibernate懒加载模式报错处理
- 对于js的报错处理
- 【hibernate】大字段查询报错处理
- hibernate中delete()方法报错处理方法
- flex快速加载module报错处理办法
- ASPxGridView报错处理
- mencoder 报错处理
- tomcat报错处理
- Unity 报错处理
- @override 报错处理
- javaee报错处理
- RSS报错处理
- SVN报错处理
- hadoop报错处理
- Unity 报错处理
- ZF报错处理
- override 报错处理
- adb报错处理
- 数据结构---表达式求值
- Python快速排序算法
- varnish
- Android 获取各种路径的方法:
- Eloquent JavaScript 笔记 八: Bugs and Error Handling
- 对于hibernate懒加载模式报错处理
- 让linux也可以使用pbcopy
- Vert.x有毛病?
- spring动态多数据源实例Demo
- 数据结构----二叉树的遍历
- webrtc 音频视频数据流流程图
- android 自定义Button,抛弃写shape文件
- 数据结构----栈和队列的综合应用
- 单机asm和集群asm 的不同之处.