Lazy加载的方式

来源:互联网 发布:国产电动牙刷知乎 编辑:程序博客网 时间:2024/05/16 07:34

关于级联操作中包含了lazy加载,可以优化加载数据。如果采用EAGER方式加载会耗损很多资源。

 

不过在设置了lazy以后,操作的时候可能会出现Session close的问题。

 

我查阅了很多资料,lazy加载的方式有几种。

 

不过我觉得最简单的方式,是加载viewsession。看到别人讨论中,说这种方式可能会导致session无法关闭?我也不清楚,等以后再去研究,暂且先用着吧

 

 

Jpa的配置:

 

hibernate的配置:

以上的信息全部要配置与 web.xml

 

在配置web.xml中还要注意顺序问题, 应先配置viewsession 然后spring 然后struts

不然也会出现session close的问题。

 

第二种是AOP动态加载的方式见:

http://www.javaeye.com/topic/129698

 

使用动态代理AOP结构,来管理EntityManager,这种方案不依赖于容器,在后台服务、测试中都可以良好使用。

这种方式也推荐使用..

 

 

 

 

  以上的方案不修改的Service/DAO模型,侵入性小,测试方便,但是有一些局限性。更良好的方案可以将OpenEntityManagerHandler进行一些修改,
1.    加入private String FACTORY_NAME=DEFAULT_ENTITYMANGER_FACTORY,修改获取EntityManagerFactory的方法。
2.    在applicationContext-*.xml中配置bean,并ref指向EntityManagerFactory的bean。
3.    修改你的Service/DAO模型,引入OpenEntityManagerHandler。

 

 

 

 

 

 

 

另外还有一种 采用抓取的方式

Hibernate can explicitly initialize the various paths.
For example, let's say we have a PersonDao - we could have this API:

Here is what an implementation of this DAO may look like:

You would use this in your application like this:

This would initialize the mother association, the children association, and each child's mother association (which, would be Jane in this case).

 

在lazy调用的时候,加了以上的openseesionview信息仍然报错,这个时候就需要检查配置文件。

1.检查事务配置

2.检查Services 事务配置

如果都设定好了,还报错,这个时候需要修改EntityManager在上下文对应的信息,在@PersistenceContext后面增加(type=PersistenceContextType.EXTENDED),就应该可以解决lazy加载的时候,出现的no session or session was closed的错误。 但是需要注意事务处理的时候,会出现其他的问题。

 

Persistence Context 持久化上下文
   
Persistence Context是持久化框架需要维护的一个中间容器,其中会存放受管理对象的副本,例如从数据库获取的实体对象,或者调用持久化框架保存过的对象等
主要作用有:缓存(例如NHibernate的一级缓存概念)、支持Flush操作、辅助实现实体以及属性的Dirty检查等
JPA将persistence context分为2种类型:PersistenceContextType.TRANSACTION和PersistenceContextType.EXTENDED。TRANSACTION类型(默认类型)的persistence context生命周期与transaction scope一致,例如事务开始时为生命周期的开始阶段,事务提交或回滚时生命周期结束。EXTENDED类型的生命周期基本与EntityManager一致,在EntityManager创建时开始,在EntityManager关闭时结束。实现Extended类型的persistence context时需要注意其生命周期可能跨越多个事务以及不在事务范围内的情况,伴随的是这些情况下对persistence context中实例对象生命周期以及相关操作的影响,例如version控制等

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 双11订金不退怎么办 在商场买到假货怎么办 网上买到假手机怎么办 网上买了假手机怎么办 网银转账被骗了怎么办 支付宝被骗了钱怎么办 被支付宝骗了钱怎么办 头发出油怎么办小妙招 照相的时候脸歪怎么办 怀孕两个月同床了怎么办 小姐被警察抓了怎么办 我的世界迷路了怎么办 砸到手指甲很痛怎么办 手被锤子砸肿了怎么办 拇指突然疼肿了怎么办 手指甲压紫了痛怎么办 砸到手指头肿了怎么办 小婴儿体重不长怎么办 2岁半宝宝不说话怎么办 米兰叶子掉光了怎么办 qq雷霆战机闪退怎么办 微信限额20万怎么办 欧拉方程x<0怎么办 柿子核吃下去了怎么办 橡胶底白色变黄怎么办 20了丁丁还很小怎么办 5角硬币吞进肚子怎么办 孩子吞了5角硬币怎么办 左腿比右腿微粗怎么办 一个腿长一个腿短怎么办 刚买的毛笔很硬怎么办 我哥哥太爱我了怎么办 如果婚姻无法维持该怎么办 捡了一只流浪狗怎么办 微博加载不出来怎么办 我的脾气很暴躁怎么办 歌单恢复已删除怎么办 家里破产了我该怎么办 对付有心计的人怎么办 上嘴唇无故肿了怎么办 下嘴唇肿了一半怎么办