关于hibernate的一个异常的问题

XX的小石头 2013-08-09 08:00:34
在使用hibernate进行删除操作的时候,报了一个奇怪的错误:
org.springframework.orm.hibernate4.HibernateOptimisticLockingFailureException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1;

主键设置是自增的,删除操作代码如下:
session=sf.getCurrentSession();
Meeting m=new Meeting();
m.setId(id);

try{
session.delete(m);
}catch(Exception e){
e.printStackTrace();
return false;
}
return true;

百度了一下,这个问题是更新时主键设置不对引起的,可是我进行的是删除操作,怎么还会出现这个异常,求解答
...全文
238 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
afterTheDream 2013-08-10
  • 打赏
  • 举报
回复
Meeting m=new Meeting();//m对象现在是transient状态 m.setId(id); session.delete(m); Hibernate执行删除,一般需要从库中获取对象(load,get)而不是new一个对象,待对象变成持久状态后,再执行删除操作,这样对象就变成游离态。
XX的小石头 2013-08-10
  • 打赏
  • 举报
回复
找到问题了,我是删除之后再跳到一个查询的action的,但是很奇怪的是查询之后又执行了一次删除操作 Hibernate: delete from Meeting where id=? Hibernate: select meeting0_.id as id1_2_, meeting0_.address as address2_2_, meeting0_.content as content3_2_, meeting0_.listener as listener4_2_, meeting0_.speaker as speaker5_2_, meeting0_.subject as subject6_2_, meeting0_.time as time7_2_ from Meeting meeting0_ Hibernate: delete from Meeting where id=? struts.xml配置: <action name="deleteSupply" class="com.oa.action.OfficeSupplyAction"> <result type="chain"> <param name="actionName">queryAll</param> <param name="namespace">/supply</param> </result> </action> 页面使用了js来判断跳转: function del(){ var url=document.getElementById("id").getAttribute("href"); if(confirm("确定要删除吗?")){ window.location.href=url; alert("删除成功!"); return true; } return false; } 而且我把删除操作换成hql语句的形式就没问题,很奇怪啊,求解答
末日哥 2013-08-10
  • 打赏
  • 举报
回复
先用load获取一个对象的实例试试?
XX的小石头 2013-08-10
  • 打赏
  • 举报
回复
引用 2 楼 chinawang825366742 的回复:
你的ID不能写成JAVA中的Inter这个类型,你得写成int ; 不然它就出问题 了;
类型没问题,是写成int的
XX的小石头 2013-08-10
  • 打赏
  • 举报
回复
引用 7 楼 chenguangafter 的回复:
Meeting m=new Meeting();//m对象现在是transient状态 m.setId(id); session.delete(m); Hibernate执行删除,一般需要从库中获取对象(load,get)而不是new一个对象,待对象变成持久状态后,再执行删除操作,这样对象就变成游离态。
应该不是这个问题,数据库是能够成功删除的,问题我上面已经说了,是在跳转的时候会多执行一次删除操作
longintlong 2013-08-09
  • 打赏
  • 举报
回复
像是有并发线程在起事务更新这行数据。
终结i络 2013-08-09
  • 打赏
  • 举报
回复
你的ID不能写成JAVA中的Inter这个类型,你得写成int ; 不然它就出问题 了;
XX的小石头 2013-08-09
  • 打赏
  • 举报
回复
补充:数据库里面的数据可以成功删除,但是跳转的时候就报出这个错误

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧