|
查看: 990|回复: 2
|
[Java] 关于LazyInitializationException , Hibernate and EJB3
[复制链接]
|
|
|
已经上网查了, 是牵涉到Singleton implementation 的问题。
这个Exception 应该是 Hibernate throw 出来的, 由于 Jboss 4.22GA 用的正是 Hibernate , 所以会有这个问题。
我想问的是, 如果我不是用JBoss , 也没有用 hibernate 。 这种(不是这个) exception 会发生吗?
EJB3 里有没有内建机制, 可以达到Lazy Fetching 但不控制这种情况的发生呢? |
|
|
|
|
|
|
|
|
|
|
发表于 18-5-2008 08:10 PM
|
显示全部楼层
这个问题是因为Hibernate的Entity的Relationship默认是Lazy Fetch的,也就是说当你initialize一个parent object后,children objects是暂时不会被加载的;当你需要用到child object时,Hibernate session才会载入child object。
LazyInitializationException最普遍的原因就是在加载Child object的时候session就已经close了,所以才会抛出这个异常。这个问题普遍出现在view layer,因为session的lifecycle通常是在request之后就会close了。
EJB3要如何解决这个问题我不太清楚,没办法的话就要用Eager Fetch,不过很耗资源;
在Spring的话可以用OpenSessionInViewFilter解决。 |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 24-5-2008 03:14 PM
|
显示全部楼层
谢谢你的解答。
我也找了些资料,geronimo 的内建 persistence engine , openjpa 是没有throw 这个Exception 的, 只会return null。 所以在handling 上跟Hibernate 不同。
我正好在port 一个 Jboss 的 project 到 geronimo , 所以面对这个问题, 一番的搜寻与研究,花了很多时间但也了解了很多。 |
|
|
|
|
|
|
|
|
| |
本周最热论坛帖子
|