延迟加载
来源:互联网 发布:网易新闻养猪场知乎 编辑:程序博客网 时间:2024/04/28 08:01
Spring默认是关闭session的,所以当我们需要使用延迟加载的时候就需要进行特殊的设置,有四种方法可以解决这个问题
1、 lazy=false 使用即时加载
2、 使用迫切外连接。
3、 使用声明式事物来完成,将需要延迟加载的数据在biz层中调用,即可得到数据。
4、 使用spring提供的OpenSessionInViewFilter来控制(推荐)
OpenSessionInViewFilter介绍
他的主要的功能就是延迟关闭hibernate的session。以一次请求为单位,请求过程中session绑定到线程里,请求结束后session关闭。
有个可配置的属性singleSession,是否在一次请求中使用一个session,默认是true。可以选择false,则只是延迟了session的关闭时间,对缓存性能的提升较小。
使用他的时候注意,在删除或者更新数据的时候可能会出现问题,
1、使用false属性值,则在删除数据的时候出现open two session的错误,是因为删除前取obj用的一个session,而删除的时候又用了另一个session,而第一个session中的obj还在缓存中,就报错误。不建议使用。
错误:org.hibernate.HibernateException: Illegalattempt to associate a collection with two open sessions
2、使用true属性值,则会报flush错误,是因为使用了一个session,删除前查询得到的数据obj在缓存中,而当删除前十不flush缓存的,所以报错。
错误:Turn your Session intoFlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition
解决方案是:
<init-param>
<param-name>flushMode</param-name>
<param-value>AUTO</param-value>
</init-param>
的查询方法
commit()方法
flush()方法
FlushMode.AUTO
清理
清理
清理
FlushMode.COMMIT
不清理
清理
清理
FlushMode.NEVER
不清理
不清理
清理
不过使用他时也有弊端,就是延迟加载会出问题。
最好的解决方法:声明式事务+OpenSessionInViewFilter来完成。
- 延迟加载
- 延迟加载
- 延迟加载
- 延迟加载
- 延迟加载
- 延迟加载
- 延迟加载
- 延迟加载
- 延迟加载
- 延迟加载
- 延迟加载
- 延迟加载--懒加载
- 懒加载(延迟加载)
- Hibernate延迟加载之属性延迟加载
- Hibernate中的延迟加载
- Hibernate延迟加载机制
- Hibernate延迟加载机制
- 再论hibernate延迟加载
- 第一次发博客,介绍下我们公司
- 数据结构--连续存储数组算法
- (3)VS2010+Opencv-2.4.8的配置攻略
- 黑马程序员-交通灯管理系统
- 因以下文件的损坏或丢失,Windows无法启动【解决方法】
- 延迟加载
- 【Android】Uri、UriMatcher、ContentUris详解
- [微信机器人_04]自然语言处理简单实现
- 37wan《武易》全新系统机密放送
- 第二周:Greenfoot游戏开发(螃蟹吃沙蠕虫)
- 百度地图API学习总结
- “电子测量之王”安捷伦告别托拉斯
- 观察者模式与Guava EventBus
- HTML TAG CHECKER/HTML标签检测CHROME插件