`

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

阅读更多

用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执行持久层访问步骤

    《Hibernate执行持久层访问步骤详解》 在Java开发中,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。它允许开发者使用面向对象的方式进行数据操作,而无需关注底层的SQL语句。本文将...

    Hibernate持久层方法汇总

    本文将详细介绍Hibernate持久层中的一些核心方法,包括`session.load`, `session.find`, `session.iterator`, `session.save`, `session.update`, `session.saveorupdate`。 1. `session.load()`: - `load()`方法...

    Hibernate 基于持久层框架的DAO模式应用

    在基于持久层框架的DAO(Data Access Object)模式应用中,Hibernate扮演着核心角色,使得业务逻辑和数据访问逻辑分离,提高了代码的可复用性和可维护性。 1. **DAO模式的理解** DAO模式是一种设计模式,它创建了...

    Hibernate操作持久化对象

    这个类展示了如何使用Hibernate的简单操作,如`get()`, `add()`, `del()`, 和 `update()`方法,这些方法调用了基类的抽象方法,进一步简化了DAO层的实现。 在Hibernate中,对象的状态分为瞬时状态、持久状态和脱管...

    用 Hibernate 和 Spring 开发持久层.zip

    在"用 Hibernate 和 Spring 开发持久层.zip"这个压缩包中,可能包含的文件有项目结构示例、配置文件、源代码以及相关的文档说明。开发者可以学习如何配置Spring和Hibernate的整合,如何编写Repository接口,以及如何...

    持久层hibernate详解

    ### 持久层Hibernate详解 #### 一、什么是Hibernate? Hibernate是一个开源的对象关系映射(Object Relational Mapping,简称ORM)框架,用于Java应用程序与关系型数据库交互。通过使用Hibernate,开发人员可以将...

    用Hibernate和Spring开发持久层

    总结起来,使用Hibernate和Spring开发持久层可以大大简化数据访问代码,提高开发效率,同时借助Spring的事务管理和依赖注入,使得应用更加健壮和易于维护。在实际项目中,理解并熟练掌握这两者的结合,是成为一名...

    Hibernate 对象持久化

    **Hibernate对象持久化** 在Java开发中,数据库操作是不可或缺的一部分。Hibernate作为一种强大的ORM(对象关系映射)框架,极大地简化了Java应用与数据库之间的交互。它通过将Java类映射到数据库表,实现了对象...

    基于Hibernate框架的数据持久层的研究及其应用.doc

    《基于Hibernate框架的数据持久层的研究及其应用》 在软件工程领域,尤其是在J2EE平台下进行企业级应用开发时,数据持久层的设计是至关重要的环节。数据持久层是应用程序与数据库之间的桥梁,负责数据的存储和检索...

    hibernatetools-Update-4.1.1.zip

    Hibernate Tools的核心功能之一是逆向工程(Reverse Engineering),它可以将现有的数据库结构自动生成对应的Java实体类、Hibernate配置文件以及DAO层代码,极大地简化了项目初始化阶段的工作。在4.1.1版本中,这一...

    使用Hibernate完成对象持久化

    【使用Hibernate完成对象持久化】 在Java开发中,对象持久化是将应用程序中的对象与数据库中的数据进行绑定,使得对象的状态能够在系统重启后仍然保持。Hibernate是一个强大的对象关系映射(ORM)框架,它简化了...

    hibernate持久化对象生命周期[参照].pdf

    它允许开发者使用面向对象的编程方式来处理数据库操作,极大地简化了数据访问层的复杂性。本文将深入探讨Hibernate中的持久化对象生命周期,包括瞬时对象、持久化对象和游离对象的状态转换及其特性。 1. 瞬时对象...

    精通hibernate:对象持久化技术孙卫琴第二版part2

    Hibernate位于持久化层,是域模型和关系数据模型之间的桥梁。 1.1 应用程序的分层体系结构 1 1.1.1 区分物理层和逻辑层 2 1.1.2 软件层的特征 3 1.1.3 软件分层的优点 4 1.1.4 软件分层的缺点 4 1.1.5 Java...

    Hibernate实体层设计

    Hibernate,作为Java领域中的一款著名持久化框架,它将对象关系映射(ORM)的概念引入到数据库操作中,极大地简化了数据库编程工作。本篇文章将深入探讨Hibernate实体层设计的核心概念、优势以及如何在实际项目中...

    数据持久层框架 Hibernate.7z

    数据持久层框架 Hibernate 是一种广泛应用于Java环境中的对象关系映射(ORM)工具,它极大地简化了数据库操作,使得开发者可以使用面向对象的方式来处理数据库事务,而无需关注底层的SQL语句。Hibernate 提供了一种...

    基于java的开发源码-数据持久层框架 Hibernate.zip

    而Hibernate作为Java中的一个数据持久层框架,是Java开发者处理数据库操作的重要工具。它提供了对象关系映射(ORM)功能,使得程序员可以使用面向对象的方式来操作数据库,避免了传统的SQL语句直接操作,大大提高了...

    基于Java的数据持久层框架 Hibernate.zip

    **Java数据持久层框架Hibernate详解** Hibernate是一款强大的Java对象关系映射(ORM)框架,它为Java开发者提供了在关系数据库和面向对象模型之间进行转换的工具。ORM框架简化了数据库操作,使得开发者可以使用Java...

    java源码:数据持久层框架 Hibernate.zip

    Hibernate 是一个强大且广泛使用的 Java 数据持久层框架,它简化了数据库操作,使开发者能够通过对象关系映射(ORM)技术将 Java 对象与数据库表进行无缝对接。在这个 `java源码:数据持久层框架 Hibernate.zip` ...

Global site tag (gtag.js) - Google Analytics