• 关于Hibernate查询对象调用set方法自动同步到数据库解决方案


    Hibernate的get和load方法查询出的实体都是持久化对象,拿到该对象后,如果你调用了该对象的set方法,如果再同一个事务里面,那么在事务递交的时候,Hibernate会把你设置的值自动更新到数据库中。

    解决方案如下:

    1,通过AOP对事务的service层,Dao层的管理

    2,在获取实体对象后,调用下getHibernateTemplate().evict(entity)方法,该方法的作用是把持久化对象变成托管状态。变成托管状态后,Hibernate就不会再去自动更新该实体

     3 Hibernate的几种实体状态:

    3.1.瞬态:
      一个实体通过new操作符创建后,没有和Hibernate的Session建立关系,也没有手动赋值过该实体的持久化标识(持久化标识可以认为是映射表的主键)。
                   此时该实体中任何属性的更新都不会反映到数据库表中。
    3.2.持久化:
                   当一个实体和Hibernate的Session创建了关系,并获取了持久化标识,而且在Hibernate的Session生命周期内存在。
                   此时针对该实体任何属性的更改都会直接影响到数据库表中一条记录对应字段的更新,即与数据库表同步。
    3.3.脱管:
                  当一个实体和Hibernate的Session创建了关系,并获取了持久化标识,而此时Hibernate的Session生命周期结束,实体的持久化标识没有被改动过。
                  针对该实体任何属性的修改都不会及时反映到数据库表中。

                  关闭session可以使实体从持久化状态转为托管状态。

    作者:郑金圣
    本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
  • 相关阅读:
    Git仓库操作笔记[Git repositories]
    supervisor 使用
    python动态加载(二)——动态加载类
    python动态加载(一)——加载方法
    python连接hdfs常用操作
    python对文件进行并行计算初探
    python加载包顺序和PYTHONPATH
    python实现读取数据库的断点续传
    python实现读取文件的断点续传
    python启动一个新进程
  • 原文地址:https://www.cnblogs.com/zhengjinsheng/p/11132093.html
Copyright © 2020-2023  润新知