更新多条记录出错:Hibernate.在线等....
试图在一个Action中调用多次Hibernate插入数据,
因为插入前一条数据后在后一条插入数据中需要用到前一条的记录.
代码如下:
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");
}
}

出错如下: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.这种问题的解决方法,在网上搜了一下,找不到适当的方法.国外的论坛也进了好几个.都没有合适的.
我是要在SSH集成中用到,不是在测试类用..!!

解决方案 »

  1.   

           HiberDb hdb = new HiberDbImpl();//hibernate实现类
       hdb.setAutocommit(true);
           hdb.hdbCommit();
      

  2.   

    我在Action中怎么设置啊?老兄..Struts中
      

  3.   

    在Hibernate中也可配置:
    自动提交事务
    <property name="connection.autocommit">true</property>也可以底层手动配置
    Session session=getSession();
    开启事务 session.beginTransaction();
    提交事务 session.beginTransaction().commit();
      

  4.   

    请问楼主能否告知一下解决办法?我也遇到了同样的异常。谢谢
    如果回复不方便,麻烦在邮件给点指教:[email protected]
      

  5.   

    请教高人指点,小弟也遇到同样的问题:[email protected]
      

  6.   

    楼主还在吗?小弟也遇到这问题了:[email protected]。求解决!
      

  7.   

    同样问题求解 [email protected]
      

  8.   

    遇到相同问题求解答[email protected]
      

  9.   

    楼主我也遇到和你一样的问题,跪求你帮个忙,小弟邮箱:397230449@qqcom
      

  10.   

      我也遇到同样的问题了,能帮个忙吗?邮箱:[email protected]
      

  11.   

    楼主分享一下解决方案吧。我邮箱:[email protected]。谢谢啦!
      

  12.   

    我也遇到了同样的问题,在线等楼主哦![email protected]
      

  13.   

    楼主,小妹也想知道这个问题怎么解决?先谢咯![email protected]
      

  14.   

    汗!!楼主有时间也给我发一份吧,[email protected] 谢谢!
      

  15.   

    楼主,方便的话给发封邮件吧,[email protected],谢了!
      

  16.   

    朋友可以发一个给我吗谢谢啦[email protected]
      

  17.   

    我也有这个问题,怎么解决的?
    [email protected]
    谢谢
      

  18.   

    楼主直接在这说解决方法不行么?
    为什么非要别人给你留email?
    看得真不爽。
      

  19.   

    楼主求解啊,[email protected] 或把你解决后的代码分享一下哈
      

  20.   

    楼主求解啊,[email protected]