Hibernate重复提交数据

potatomoon 2013-06-23 11:51:49
我有这么一个需求,先从数据库中检索出一条数据,然后对这个数据进行修改,最后将修改后的数据作为一条新的数据保存到数据库中。
我现在的问题是,每次保存数据的时候数据库中总是保存两条数据,一条修改前的数据(就是copy了检索出的数据,只是主键不一样),一条修改后的数据。我只想保存修改后的数据啊,在网上搜了半天也没解决问题,希望大神们帮帮忙,小弟在此感激不尽,谢谢!!!
...全文
126 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
stonespace 2013-06-24
  • 打赏
  • 举报
回复
你说的保存是指调用save方法?如果修改了数据,你无需调用save方法,只需要调用session的flush方法就可以,在session的事务提交的时候自动保存所有被修改的记录, 如果你调用session的save方法,不论数据是new出来的还是查询出来的,都会生成一条新的记录,所以不想生成新记录的话,不要调用save,
风_晓寒 2013-06-24
  • 打赏
  • 举报
回复
修改后保存直接用update方法就行了
  • 打赏
  • 举报
回复
hibernate有个SaveOrUpdate的方法啊,有就修改当前数据,没有则新增一条数据
potatomoon 2013-06-24
  • 打赏
  • 举报
回复
引用 1 楼 stonespace 的回复:
你说的保存是指调用save方法?如果修改了数据,你无需调用save方法,只需要调用session的flush方法就可以,在session的事务提交的时候自动保存所有被修改的记录, 如果你调用session的save方法,不论数据是new出来的还是查询出来的,都会生成一条新的记录,所以不想生成新记录的话,不要调用save,
之前是用save的,但是save的时候会报异常,Don't change the reference to a collection with cascade="all-delete-orphan",我查了一下说是我的entity中有一个set的属性,而这个set属性在xml文件中的case属性是all-delete-orphan,深层原因我也不太清楚,我参照http://27091497.blog.163.com/blog/static/118062502007101933822277/作了修改,还是不行。后开我就讲保存的方法给位merge了,虽然不报异常了,却发生数据保存两边的问题。 按照你说的,我去掉保存方法,系统在最后会自动调用flush方法,但是还是报上边的错Don't change the reference to a collection with cascade="all-delete-orphan",这个就不知道怎么解决了!

81,092

社区成员

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

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