问大家个spring+hibernate的小白级问题,某个对象中的属性配置了lazy=true以后,是不是这个对象只要被查询了就延迟加载它的这个属性?不管你用get(clazz,id) load(clazz,id) find(sql),对于懒加载session延迟关闭的问题,我不想使用OpenSessionInViewFilter那种垃圾的烂东西,有没有个既能提高保留延迟加载性能又可以不去延长session和事务周期的的解决方案?高手快现身指点我一下吧...........小弟冰天雪地原地360°打转光屁股坐地跪求了啊!!
研究下OpenSessionInViewFilter,造轮子吧
而load的方法加载的是一个代理对象,是使用延迟加载的。。
因此如果你编写的一个实体类,在加载的时候就是用get方法,但是
这样有一个缺点,如果你写的实体类与别的实体类有关联的话,那么lazy=true
还是会延迟加载的,到达web层的话,session已经关闭,因此在项目中好像都是
配置OpenSessionInViewFilter,这个非常easy就只是在web.xml文件中配置
一个过滤器就行,不知道为什么说是懒东西。用起来非常方便。。 如果你真不喜欢就用ThreadLocal吧。线程级的玩意。
http://junyaxu.javaeye.com/blog/371264
不用OpenSessionInViewFilter的话
关注
想得挺周到,想象你做出来的 办公系统 CRM系统
拿到现实生活中有多少人再用再来看这问题把。
在中国就算大一点公司 ,那就几百人。。基本上不存在性能的问题
况且现在硬件那么高级。。你就不要杞人忧天了
一般的OA系统也就几十到百来个人吧。。
如果你只测试业务逻辑中的方法,web容器不用启动。。
测试的时候 用 AbstractTransactionalSpringContextTests这个类
是spring-test.jar包中的。它会帮你管理事务以及关闭session
你放心写你的业务逻辑把。
你这里的session如果交给spring那么它就和当前线程作为一个变量、属性绑定在一起,如果当前线程结束,spring就会负责把session关闭,所以不会存在不能及时释放的情况。
2.更要命的是,我们在web层去调用lazy="true"的对象时还会报session已经关闭的错误?
你错啦,OpenSessionInViewFilter的主要功能是使每个请求过程绑定一个 Hibernate Session,即使最初的事务已经完成了,也可以在 Web 层进行延迟加载的操作。OpenSessionInViewFilter 过滤器将 Hibernate Session 绑定到请求线程中,它将自动被 Spring 的事务管理器探测到。说白了,OpenSessionInViewFilter 的作用就是在你的response响应页面延迟加载缓存对象时,保证当前session不关闭
我做的是银行项目还有保险项目,已经明确指出不能在系统中使用OpenSessionInViewFilter,我想知道不用它,我们懒加载的对象如何在session关闭之后被关联使用到的时候不报session已经关闭的错误?除此而外,是否能够找到更好的办法既能保证懒加载机制的正常使用,又不使用OpenSessionInViewFilter这种不安定机制带来的新的负面隐患!注:关于OpenSessionInViewFilter的缺点隐患,设计者本人也曾声明过,在一些大用户并发访问比较严重,安全性较高的项目中,是极力不推荐使用的,具体信息大家可以查阅相关资料:http://downpour.javaeye.com/blog/32001
有没有好的解决方案啊