用hibernate作为持久层,update是出现了重复记录

2024-02-17 02:38

本文主要是介绍用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是出现了重复记录的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/716430

相关文章

Redis的持久化之RDB和AOF机制详解

《Redis的持久化之RDB和AOF机制详解》:本文主要介绍Redis的持久化之RDB和AOF机制,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述RDB(Redis Database)核心原理触发方式手动触发自动触发AOF(Append-Only File)核

Oracle 数据库数据操作如何精通 INSERT, UPDATE, DELETE

《Oracle数据库数据操作如何精通INSERT,UPDATE,DELETE》在Oracle数据库中,对表内数据进行增加、修改和删除操作是通过数据操作语言来完成的,下面给大家介绍Oracle数... 目录思维导图一、插入数据 (INSERT)1.1 插入单行数据,指定所有列的值语法:1.2 插入单行数据,指

MyBatis Plus 中 update_time 字段自动填充失效的原因分析及解决方案(最新整理)

《MyBatisPlus中update_time字段自动填充失效的原因分析及解决方案(最新整理)》在使用MyBatisPlus时,通常我们会在数据库表中设置create_time和update... 目录前言一、问题现象二、原因分析三、总结:常见原因与解决方法对照表四、推荐写法前言在使用 MyBATis

Redis持久化机制之RDB与AOF的使用

《Redis持久化机制之RDB与AOF的使用》:本文主要介绍Redis持久化机制之RDB与AOF的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Redis持久化机制-RDB与AOF一、RDB持久化机制1、RDB简介2、RDB的工作原理3、RDB的优缺点4

SpringCloud之consul服务注册与发现、配置管理、配置持久化方式

《SpringCloud之consul服务注册与发现、配置管理、配置持久化方式》:本文主要介绍SpringCloud之consul服务注册与发现、配置管理、配置持久化方式,具有很好的参考价值,希望... 目录前言一、consul是什么?二、安装运行consul三、使用1、服务发现2、配置管理四、数据持久化总

在MySQL执行UPDATE语句时遇到的错误1175的解决方案

《在MySQL执行UPDATE语句时遇到的错误1175的解决方案》MySQL安全更新模式(SafeUpdateMode)限制了UPDATE和DELETE操作,要求使用WHERE子句时必须基于主键或索引... mysql 中遇到的 Error Code: 1175 是由于启用了 安全更新模式(Safe Upd

Redis事务与数据持久化方式

《Redis事务与数据持久化方式》该文档主要介绍了Redis事务和持久化机制,事务通过将多个命令打包执行,而持久化则通过快照(RDB)和追加式文件(AOF)两种方式将内存数据保存到磁盘,以防止数据丢失... 目录一、Redis 事务1.1 事务本质1.2 数据库事务与redis事务1.2.1 数据库事务1.

java面试常见问题之Hibernate总结

1  Hibernate的检索方式 Ø  导航对象图检索(根据已经加载的对象,导航到其他对象。) Ø  OID检索(按照对象的OID来检索对象。) Ø  HQL检索(使用面向对象的HQL查询语言。) Ø  QBC检索(使用QBC(Qurey By Criteria)API来检索对象。 QBC/QBE离线/在线) Ø  本地SQL检索(使用本地数据库的SQL查询语句。) 包括Hibern

org.hibernate.hql.ast.QuerySyntaxException:is not mapped 异常总结

org.hibernate.hql.ast.QuerySyntaxException: User is not mapped [select u from User u where u.userName=:userName and u.password=:password] 上面的异常的抛出主要有几个方面:1、最容易想到的,就是你的from是实体类而不是表名,这个应该大家都知道,注意

Caused by: org.hibernate.MappingException: Could not determine type for: org.cgh.ssh.pojo.GoodsType,

MappingException:这个主要是类映射上的异常,Could not determine type for: org.cgh.ssh.pojo.GoodsType,这句话表示GoodsType这个类没有被映射到