我在用hibernate 在对一个表做修改时老是出错,一直也查不出来,郁闷得不行,这个表在数据库中有父表也有子表,如果子表中没有数据时可以顺利修改,但子表有数据时怎么也修改不了。希望坛子里的大侠们能帮帮我,在线等……我大体思路是:每次更新之前先根据id retrieve 出来一个vo,然后把各个参数set进去,此时我需要验证修改后的信息是否跟表中其他的信息重复,所以利用这个vo 再做一次查询操作,如果我在不修改任何参数直接点“修改”可以通过,只要我改其中任何一个参数点“修改”后就出错,出错的地方就是那个验证的查询函数。错误信息是:15:35:33,422 [com.icss.mdm.maintain.structure.StructureUpdateServlet.performTask(StructureUpdateServlet.java:129)] - java.lang.Exception: 查询数据库出错...org.hibernate.AssertionFailure: collection was not processed by flush()
java.lang.Exception: 查询数据库出错...org.hibernate.AssertionFailure: collection was not processed by flush()
at com.icss.mdm.common.structure.StructureFactory.codeIsUnique(StructureFactory.java:387)
at com.icss.mdm.maintain.structure.StructureUpdateServlet.performTask(StructureUpdateServlet.java:115)原代码是:try{
   HibernateUtil.beginTransaction();
   MdmCodeVO codeVo = (MdmCodeVO)opm.retrieveObj(MdmCodeVO.class, code_id);
   codeVo.setCodeEnname(code_enName);
   codeVo.getType().getId();
   codeVo.setCodeCnname(code_cnName);
   codeVo.setCodeTabname(code_tabName);
   codeVo.setOrderNum(Integer.valueOf(code_order == null || code_order.equals("") ? "0" : code_order));
   codeVo.setCodeRange(code_range);
   codeVo.setRefStand(code_standard);
   codeVo.setCatFund(code_fund);
   codeVo.setOtherInfo(code_info);
   codeVo.setCodingMeth(code_method);
   codeVo.setOtherInfo(code_info);   opm.updateObj(codeVo);
} catch(Exception e){
   HibernateUtil.rollbackTransaction();
   log.error(e);
   request.setAttribute("CustomErr", "更新代码表时出错!");
   forward(request, response, WINDOWINIFRAME_ERROR_PAGE_URL);
}
恳求各位帮我指点一下,困绕了我N久了!!
我没多少分了,都拿出来了!!

解决方案 »

  1.   

    update ,delete ,insert 之后都需要 commit();以及对异常的回滚
      

  2.   

    HIBERNATE还不熟悉,帮你顶一下人气,呵呵
      

  3.   

    在try里最后要加上commit()吧
    提示的错误正是没有刷新缓存
      

  4.   

    try里加commit
    catch里加rollback
    finally加close
      

  5.   

    commit();在源程序是写了的,我拷的时候搞掉了.问题不是这
      

  6.   

    这个要在hibernate里声明你的关联关系,把哪个关联后修改主表是同时修改子表的值的参数设置成为true,这个我以前做过 ,现在时间长了也忘了,你看看hibernate的开发文挡,里面有~