本文主要是介绍用hibernate作为持久层,update是出现了重复记录,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
用hibernate作为持久层,update是出现了重复记录。奇怪了,为什么会明明是update,怎么可能出现添加一条记录的结果呢?由于在操作过程中,修改了某个属性(字段),可以update成功。但我在页面中的另一个属性(它有一个回车操作去从数据库拿另外的数据来更新)中修改,就会出现添加一个新的记录。WHY?
我仔细看了一下日志,两个不同的操作sql真不一样,一个是用insert,另一个是用update语句。反过来的想了想有关pojo相等的比较原理。
我于是有了几个想法,来测试。
1)两个对象的比较(equals)规则的可能出错了。
在我记忆中,pojo对象默认的equals方法是用主键来认识,两个对象是否相等。以前没有重写equlas方法和hashCode方法。对于不是很熟悉hibernate的我来说,还是决定重写这两个方法。编译完,重启tomcate,问题依旧。
2) 是不是我在持久层调用方法出错了呢?
仔细看了一下saveOrUpdate()这个方法的文档。saveOrUpdate方法能通过现个对象的equals方法来区分,到底是要insert还是要update。看来这个应该没有问题。
3)经过上面两步的推理。难道是要修改对象的关键字的值被漏掉了吗?
我追踪了主鍵值,由于主键值在页面是在一个隐藏域。当操作出错属性(它有一个回车操作去从数据库拿另外的数据来更新)返回时,查看了页面的源代码,果然,隐藏域的值为空。原来在我返回页面时,忘记给它保存原来的值了。
经过一番折腾,终于搞定了。:)
在编码过程中一定要仔细,严谨,平时多注意理论知识的积累,理论联系实践。
这篇关于用hibernate作为持久层,update是出现了重复记录的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!