当前位置: 代码迷 >> J2EE >> :怎么解决:don't flush the Session after an exception occurs的方法
  详细解决方案

:怎么解决:don't flush the Session after an exception occurs的方法

热度:484   发布时间:2016-04-22 02:17:00.0
在线等:求救如何解决:don't flush the Session after an exception occurs的方法
更新多条记录出错:Hibernate.在线等....
试图在一个Action中调用多次Hibernate插入数据,
因为插入前一条数据后在后一条插入数据中需要用到前一条的记录.
代码如下:

Java code
    public ActionForward regUser(ActionMapping mapping, ActionForm form,            HttpServletRequest request, HttpServletResponse response)            throws Exception {        UserActionForm uaf = (UserActionForm)form;        //取出从页面提交过来的数据        String name = uaf.getName();        String password = uaf.getPassword();        String password1 = uaf.getPassword1();        String nichen = uaf.getNichen();        String email = uaf.getEmail();        String province = uaf.getProvince();        String sex = request.getParameter("sex");        MD5 md5 = new MD5();        //将页面提交过来的数据设置进User类中        User user = new User();        user.setName(name);        user.setEmail(email);        user.setPassword(md5.getMD5ofStr(password));        user.setNichen(nichen);        user.setSex(sex);        user.setProvince(province);        user.setRegTime(new java.sql.Timestamp(System.currentTimeMillis()));        //调用业务逻辑方法        int flag = 0;        try {            flag = userManager.add_User(user);        }catch(Exception e){            e.printStackTrace();            return mapping.findForward("add_fail");        }                /**         * 默认的方法是开通博客同时是发表一篇开通博客的日志.         */        Blog blog = new Blog();        blog.setName(name);        blog.setVisited(1);        blog.setGrade(1);        blog.setOnline(true);        blog.setUser(user);        blog.setLastLoginTime(new java.sql.Timestamp(System.currentTimeMillis()));        blog.setMingyuan("OpenSource社区博客中心欢迎你");        blog.setHead(null);                /**         * 发表一篇开通博客的日志...         */        Daily daily = new Daily();        daily.setTitle("用户"+user.getName()+"开通博客--"+name);        daily.setContent("<font size='4'><p>感谢用户:<font color='white' size='3'>"+user.getName()+"</font>在OpenSource开源社区中心开通博客</p>" +                "<p>若有任何问题及意见,请发邮件到*****@163.com或者致电到:*****或者QQ交谈:******</p>" +                "<p>如果发生问题,我们会尽快帮你解决你所提出的问题,你的意见及问题是我们开源社区前进的动力!</p>"+                "<p>谢谢你的合作!</p></font><p align='right'>开发团队PPP敬上!</p>");        daily.setVisited(0);        daily.setPostTime(new java.sql.Timestamp(System.currentTimeMillis()));        int flag2 = 0;        try {            flag2 = blogManager.add_Blog(blog);        }catch(Exception e){            e.printStackTrace();            return mapping.findForward("add_fail");        }        daily.setBlog(blog);        try {            dailyManager.add_Daily(daily);        }catch(Exception e){            e.printStackTrace();            return mapping.findForward("add_fail");        }        if(flag==1 && flag2==1){            return mapping.findForward("add_success");        }else {            return mapping.findForward("add_fail");        }    }    


出错如下:
Java code
javax.servlet.ServletException: org.hibernate.AssertionFailure: null id in com.hpjianhua.xiehui.model.User entry (don't flush the Session after an exception occurs)    org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:535)    org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:433)    org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)    org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)    org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)    javax.servlet.http.HttpServlet.service(HttpServlet.java:690)    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)    org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:174)    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)    org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:78)    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)root cause org.hibernate.AssertionFailure: null id in com.hpjianhua.xiehui.model.User entry (don't flush the Session after an exception occurs)    org.hibernate.event.def.DefaultFlushEntityEventListener.checkId(DefaultFlushEntityEventListener.java:55)    org.hibernate.event.def.DefaultFlushEntityEventListener.getValues(DefaultFlushEntityEventListener.java:157)    org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:113)    org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:196)    org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:76)    org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:26)    org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)    org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)    org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)    org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:558)    org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:540)    org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:510)    org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:310)    org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:117)    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)    org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:209)    $Proxy24.add_User(Unknown Source)    com.hpjianhua.xiehui.web.action.UserAction.regUser(UserAction.java:52)    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)    sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)    sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)    java.lang.reflect.Method.invoke(Unknown Source)    org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:270)    org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:187)    com.hpjianhua.xiehui.web.action.BaseAction.execute(BaseAction.java:18)    org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:106)    org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)    org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)    org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)    org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)    javax.servlet.http.HttpServlet.service(HttpServlet.java:690)    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)    org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:174)    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)    org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:78)    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)note The full stack trace of the root cause is available in the Apache Tomcat/6.0.16 logs.
  相关解决方案