zoukankan      html  css  js  c++  java
  • Hibernate使用get(id)获得的对象进行更改会在事务提交时持久化到数据库中(即使不用update和merge方法)

    今天同事发现个问题,从使用get(id)的形式从数据库中获得对象,改变对象的ID,在没有使用update和merge方法的情况下竟然保存到数据库中了。当时很不解,后来就在网上搜,才知道是hibernate把get(id)获得的对象称为持久化对象,对其做的更改会在事务提交后保存到数据库中。也知道需要了解hibernate对象的三种状态了,临时状态,持久化状态和游离态。下面是在百度知道上搜到的答案,整理其中两条(其实这种框架了解的并不深啊,只是会用而已):

    你通过get(id)拿到的对象,就是持久化对象。 你对持久化对象的任何更改,会在session.flush或者提交事务的时候更新到数据库。 不过也要结合事务。 如: 开启事务。 查询对象。 改变对象。//不需要显示的update。 提交事务。
    就可以更新数据库。
    建议学习一下hibernate的瞬态,持久态,托管态。

    首先你要知道,hibernate的update操作的运行机理: hibernate的update是怎么样自动的进行update操作的呢? 首先hibernate先会执行一个select操作,到数据库中查找当前要update操作的对象的主键是否存在,类似于:select id from table where id=XXX 如果查找到了改id,就说明该对象是一个持久化对象,如果该对像的某些属性变化了,hibernate就会自动的执行update操作,同步数据库中的该对象。 如果hibernate没有查找到该id,就说明该对象是一个游离的对象,hibernate就会执行insert操作。 根据这些,就可以找找是不是要update的对象的id在数据库中不存在,或是更改的该对象的id。这些都是执行insert而不是update。

  • 相关阅读:
    转:CRF++
    ProBase
    图形数据库 Neo4j 开发实战
    Linux 下升级python和安装pip
    TensorFlow (RNN)深度学习 双向LSTM(BiLSTM)+CRF 实现 sequence labeling 序列标注问题 源码下载
    开源项目kcws代码分析--基于深度学习的分词技术
    文本情感分类(二):深度学习模型
    文本情感分类(一):传统模型
    重要博文
    LSTM 文本情感分析/序列分类 Keras
  • 原文地址:https://www.cnblogs.com/daweige/p/8295180.html
Copyright © 2011-2022 走看看