求教:JPA延时加载的使用

子木007 发布于 2011/09/07 10:16
阅读 1K+
收藏 0
JPA

刚上手JPA不久,问题好多呀!  惭愧, 也请各位XDJM不吝赐教。

延时加载 的前提条件是 EntityManager 没有关闭, 一般情况下DAO 中的每个方法都有一个事务, 方法结束的时候自然会把事务提交, 把EntityManager 关闭。

当我业务层或者UI层用到某个从DAO中查询出的实体Bean 时, 这个实体Bean 上设置了 LAZY 的属性都不可以用, 也就意味着我必须得在DAO方法里面把 LAZY 的属性提前加载才可以使用,如果这样做,不就失去延时加载的本意了么,岂不是都要设置成EAGER?  是不是不需要DAO这一层而是在业务层直接操作JPA?   有点疑惑!

不知道各位是怎么做的?  有什么好的实践方法?

加载中
0
weir2008
weir2008

http://www.itcast.cn/itcast_static/JPAVideo.htm

花一点时间看看,JPA就基本明白了。

子木007
子木007
兄弟,你上次说了之后,我就都下载看了,总共21个视频文件, 可里面都是基础知识。 没有实际一点儿的应用实例, 难道是我没用领悟?
0
weir2008
weir2008

引用来自“kevin.lee”的答案

兄弟,你上次说了之后,我就都下载看了,总共21个视频文件, 可里面都是基础知识。 没有实际一点儿的应用实例, 难道是我没用领悟?
http://www.itcast.cn/video 那就看看巴巴运动网视频
0
子木007
子木007
能否先解答下我当前的疑问?   视频先收着
0
浪客Dandy
浪客Dandy

LazyLoading只在你声明entitymanager的scope里有用

换句话说你如果讲数据库操作分离为dao dal层,那么久只在这个层里有用

它的意义不是让你从逻辑层来调用,而是方便/提高你数据层的效率

我的经验就是你可以在数据层把查询执行等设计的更复杂些

0
weir2008
weir2008
调用对应的getter()时才延迟加载,不调用就不会触发。
0
hantsy
hantsy
Spring有Open Entitymanager In View Filter,和Hibernate版本的Open Session In View Filter类似( Open Session In View 是 Hibernate 一种基本使用模式,在Hibernate网站上有详细介绍),Seam 2使用 Seam Managed Persistence 在JSF页面生成时自动打开一次Session/Transatction,都是延长 Session 活跃的时间。。。和吃伟哥效果一样。
0
ShaoJiahao
ShaoJiahao
完全不依赖这些lazy loading...有些情况下会导致极低的效率的。就按照业务以及数据量来做sql,我觉得完全没必要去研究这些东东。
返回顶部
顶部