ejb3.0延迟加载

serviceA中通过DAO从数据库里取得一些实例化的Model供Action使用,在service返回后,后台hibernate的session实际就结束了。若使用了延迟加载,此时再想访问这些具备one-to-many映射的model的“多”的一方时就会扔出异常,报告session已关闭,即使fetchType.EAGER也一样。正因为如此,Spring才提出一个OpenSessionInView的解决办法,但该办法实际也不是万能的,有时一样出错。这种情况在EJB3也是存在的,当实体Bean返回给客户端的时候,这时的实体Bean已经脱离了容器的管理,若使用了延迟加载,在获取“多”的一方时就会扔出异常,要想解决这个问题,在EJB3.0中可以在返回给客户端前先加载“多”的一方,如:order.getOrderItems().size(); 。另外你也可以使用fetchType.EAGER属性明确指出在得到“一”的同时得到“多”,这在EJB3中是OK的。还可以使用join fetch语句同时得到“

posted @ 2013-06-06 14:42  若 ♂ 只如初见  阅读(119)  评论(0编辑  收藏  举报