是不是sf.setXX(codeVo) 然后再sf.codeIsUnique
解决方案 »
- java.lang.reflect.InvocationTargetException
- 论坛的引用回复功能怎么做呀?求高手解答....
- 在MyEclipse7.0下怎么改变application.properties文件的编码方式
- spring + flex 管理平台权限设计
- 如何使用shell文件实现linux环境下的挂载功能,具体代码!!
- RequestDispatcher.include 导入不存在的 resource....
- 请教利用jxl通过模板生成多页相同内容的问题
- 利用JAVAMAIL收邮件时怎样才能只收标题,发信人等?
- 小弟刚学习JAVA请问一下怎样把一个二维数组里面的值给清空呢??在线急等,请各位帮忙
- JSP更改图片后无法显示
- 大家帮我看看这是什么问题啊 ?
- jsp当中的try和catch的作用问题
codeVo = sf.getCodeByCodeID(opm, code_id);
这个方法相当于我把要更新的VO从数据库中retrieve了出来
根据id retrieve 出来一个vo ,那这个vo在hibernate的cache中就有一个pojo对应,这时如果改变了这个pojo,那这个pojo在hibernate中hibernate已经会记下他应该与数据库同步(flush),如果这之后做了其它操作(不知到codeIsUnique方法),可能会有问题(看错误也许是这个问题)我其它不理解你为什么要先retrieve 再修改再用这个pojo去查
其实在你的业务中,前面传来的数据直接用来判断重复才对啊,retrieve出来的那几个字段用来判断唯一有用码?
所以,先new一个对象来判断,再retrieve,修改,update
如果实在这样不行,就retrieve后再new一个对象(clone不知行不)来判断反正retrieve再修改后的pojo操作上是有很多限制的
然后你判断到数据库里面执行的语句返回后的值是什么,如果为空,是null,还是?
那么你判断的时候就要对应起来。
不然就会有问题
例如: public int getInfosCount() throws Exception {
int count = 0;
String queryString = "select count(*) from Info";
count = ((Integer) getHibernateTemplate().iterate(queryString).next()).
intValue();
return count;
}是否有真的值出来
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);
}
错误信息依然是:
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.maintain.structure.StructureUpdateServlet.performTask(StructureUpdateServlet.java:115)
opm.updateObj(codeVo);
之后还要
HibernateUtil.TransactionCommitXX();-
操作数据库时出错,检查数据库有没死锁。turbine例子
TransactionBroker tb = new TransactionBroker(conn); tb.begin();
BOBean subBean = null
subBean.setValue("status", "暂估");tb.saveBo(subBean);
tb.commit();
如果异常
tb.rollBack();//希望能对楼主有所帮助