石头JAVA摆地摊儿

JAVA所有的讨论-要一点一点的进步

  BlogJava :: 首页 ::  :: 联系 ::  :: 管理 ::
  30 随笔 :: 0 文章 :: 11 评论 :: 0 Trackbacks
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方法是立即检索策略。
posted on 2007-09-07 10:46 石头JAVA摆地摊儿 阅读(659) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: