关于hibernate3.1延迟加载3句话

关于hibernate3.1延迟加载3句话
1.hibernate 3.1的lazy默认值是true,需要注意。

2.针对这几天的代码:
     public  ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) 
{
        Session session 
= hibernate.HibernateSessionFactory.getSession();

        Jishuchuangxinzhongxin jishuchuangxinzhongxin 
= (Jishuchuangxinzhongxin) session
                .load(Jishuchuangxinzhongxin.
classnew Integer(Integer
                        .valueOf((String) request.getParameter(
"id"))
                        .intValue()));
        System.out.println(jishuchuangxinzhongxin.getBiaoti());
        request.setAttribute(
"jishuchuangxinzhongxin", jishuchuangxinzhongxin);

        session.close();

        
return mapping.findForward("show_jishuchuangxinzhongxin");
    }
如果去掉  System.out.println(jishuchuangxinzhongxin.getBiaoti());这句后,则findforward到JSP时就会出现错误,终其原因就是3.1默认就是延迟加载,在内部NEW了一个代理对象的引用。当加上  System.out.println(jishuchuangxinzhongxin.getBiaoti());这句后,hibernate 3.1初始化代理对象中的各个属性,下一步session.close,虽然session是close关的,但JSP也可以访问游离对象,所以不出错。

3. 避免上2条的错误,解决办法有二:(1)设置class标记为lazy=false,即非延迟检索 (2)使用session.get方法来代替session.load方法。因为session.get方法是立即检索策略。

你可能感兴趣的:(关于hibernate3.1延迟加载3句话)