资讯专栏INFORMATION COLUMN

Hibernate查询自动更新

mgckid / 3003人阅读

摘要:问题症状描述最近在处理一个新需求问题,代码的大致逻辑是获取一个实体对象,调用该对象的方法设置其中的某些字段,然后把修改后的实体作为参数供其他地方调用,根据返回值来决定是否更新这个实体到数据库中。

1、问题症状描述
  最近在处理一个新需求问题,代码的大致逻辑是获取一个实体对象,调用该对象的set方法设置其中的某些字段,然后把修改后的实体作为
  参数供其他地方调用,根据返回值来决定是否更新这个实体到数据库中。按照这个思路调用了系统中的getByid方法,结果测试的时候发
  现,不管返回值是什么,这个实体最终都被更新到数据库中了。好吧,这明显是有问题的...

 
  
2、问题原因分析和解决办法
查看日志信息后发现,系统总是会打印出一个update语句。说明系统的确是执行了更新操作的,但是我并没有调用任何和update相关的方
法。跟踪代码发现,getById方法其实是调用了hibernate的get方法。嗯,果然,问题出在这里了.....Hibernate的get和load方法查询出
的实体都是持久化对象,拿到该对象后,如果你调用了该对象的set方法,那么在事务递交的时候,Hibernate会把你设置的值自动更新到数据库中。
3、相关知识扩展

Hibernate的几种实体状态:

1.瞬态:
一个实体通过new操作符创建后,没有和Hibernate的Session建立关系,也没有手动赋值过该实体的持久化标识(持久化标识可以认为是映射表
的主键)。此时该实体中任何属性的更新都不会反映到数据库表中。
2.持久化:

当一个实体和Hibernate的Session创建了关系,并获取了持久化标识,而且在Hibernate的Session生命周期内存在。此时针对该实体任何
属性的更改都会直接影响到数据库表中一条记录对应字段的更新,即与数据库表同步。
           

3.脱管:

当一个实体和Hibernate的Session创建了关系,并获取了持久化标识,而此时Hibernate的Session生命周期结束,实体的持久化标识没有被改动过。针对该实体任何属性的修改都不会及时反映到数据库表中。关闭session可以使实体从持久化状态转为托管状态。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/76720.html

相关文章

  • Hibernate入门这一篇就够了

    摘要:一般地我们的映射配置文件和对象是放在同一个包下的。并且映射文件的命名是有规范的。指定字符的长度默认为指定映射表的字段的类型,如果 前言 本博文主要讲解介绍Hibernate框架,ORM的概念和Hibernate入门,相信你们看了就会使用Hibernate了! 什么是Hibernate框架? Hibernate是一种ORM框架,全称为 Object_Relative DateBase-M...

    fizz 评论0 收藏0
  • SpringBoot2.0之三 优雅整合Spring Data JPA

    摘要:的配置后在其他低版本的中也有使用这种配置的,具体根据版本而定。等注解是的相关知识,后面的文章将详细讲述。   在我们的实际开发的过程中,无论多复杂的业务逻辑到达持久层都回归到了增删改查的基本操作,可能会存在关联多张表的复杂sql,但是对于单表的增删改查也是不可避免的,大多数开发人员对于这个简单而繁琐的操作都比较烦恼。   为了解决这种大量枯燥的简单数据库操作,大致的解决该问题的有三种方...

    ningwang 评论0 收藏0
  • Hibernate最全面试题

    摘要:中怎样实现类之间的关系如一对多多对多的关系中怎样实现类之间的关系如一对多多对多的关系它们通过配置文件中的来实现类之间的关联关系的。 Hibernate常见面试题 Hibernate工作原理及为什么要用? Hibernate工作原理及为什么要用? 读取并解析配置文件 读取并解析映射信息,创建SessionFactory 打开Sesssion 创建事务Transation 持久化操作 提...

    张利勇 评论0 收藏0
  • Spring Boot快速入门(四):使用jpa进行数据库操作

    摘要:最常用的属性,第一次加载时根据类会自动建立起表的结构前提是先建立好数据库,以后加载时根据类自动更新表结构,即使表结构改变了但表中的行仍然存在不会删除以前的行。 添加依赖 新建项目选择web,JPA,MySQL三个依赖 showImg(https://segmentfault.com/img/bV2gNo?w=1684&h=1172); 对于已存在的项目可以在bulid.gradle加入...

    Kyxy 评论0 收藏0
  • Hibernate配置及自定义注册映射文件

    摘要:一配置属性详解可以在各式各样不同环境下工作而设计的因此存在着大量的配置参数。以简便操作,多数配置参数都有默认的配置值也是我们日常使用的必须品。 Hibernate (开放源代码的对象关系映射框架) Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装, 它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernat...

    coordinate35 评论0 收藏0

发表评论

0条评论

mgckid

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<