浏览 3709 次
锁定老帖子 主题:lazy加载问题
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2007-05-11
通过HibernateTemplate.get方法得到实体,那么实体中的延迟加载部分是一个proxy。 问题如下
java 代码
请高手赐教! 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-05-11
1、看看你的这行代码,是个BUG:
if (client.getParent() != null) client.setParent(new Parent(client.getParent().getId())); parent.setChildren(new ArrayList()); 也类似 2、不是很清楚你问的问题,但可能你需要用SessionInView模式 3、看Hibernate Reference非常关键! |
|
返回顶楼 | |
发表时间:2007-05-11
Qieqie 写道 1、看看你的这行代码,是个BUG:
if (client.getParent() != null) client.setParent(new Parent(client.getParent().getId())); parent.setChildren(new ArrayList()); 也类似 2、不是很清楚你问的问题,但可能你需要用SessionInView模式 3、看Hibernate Reference非常关键! 这段代码并没有错client.getParent()返回的是一个proxy,这个proxy可以得到代理主键。上述代码的意图是用proxy中的代理主键构建一个Parent对象,那么在service层或表现层访问时,就不会遇到LazyInitializationException。 引用 2、不是很清楚你问的问题,但可能你需要用SessionInView模式 如果仅仅只是做DAO的单元测试,那么要SessionInView模式要怎么用,如果不web应用程序,又该怎么处理。
|
|
返回顶楼 | |
发表时间:2007-05-11
呵呵。 不是BUG,也需要改!
|
|
返回顶楼 | |
发表时间:2007-05-11
Qieqie 写道 呵呵。 不是BUG,也需要改!
怎么改,有没有解决方案。 |
|
返回顶楼 | |
发表时间:2007-05-11
我的问题关键是如何防止LazyInitializationException和proxy到处蔓延,使用Session In View模式是一种解决方案,是否还存在其它方案?
|
|
返回顶楼 | |
发表时间:2007-05-11
真不想回答这个帖子呀
如果你在入门板块发表,我回答的兴趣就大了 |
|
返回顶楼 | |
发表时间:2007-05-11
Qieqie 写道 真不想回答这个帖子呀
如果你在入门板块发表,我回答的兴趣就大了 如果你是在这装牛人的话,那就太没品味了! |
|
返回顶楼 | |
发表时间:2007-05-11
如果不用open session in view的话,你需要在你的service上配interceptor,自己做session的打开和关闭操作来模拟open session in view,这样就不用考虑LazyInitializationException了,如果数据还需要在表现层使用,可以使用原始的hibernate.initialize
|
|
返回顶楼 | |
发表时间:2007-05-11
kof99th 写道 如果不用open session in view的话,你需要在你的service上配interceptor,自己做session的打开和关闭操作来模拟open session in view,这样就不用考虑LazyInitializationException了,如果数据还需要在表现层使用,可以使用原始的hibernate.initialize
这么做的话,表现层就和dao层(Hibernate)有了耦合,虽然大部分项目不会轻易更换dao的实现,但这种实现方法并不是很好,而且要求dao的接口甚至service的接口必须做出明确的说明。 |
|
返回顶楼 | |