zoukankan      html  css  js  c++  java
  • Hibernate update浅谈

    在所有之前,说明一下,对于Hibernate,它的对象有三种状态,transient、persistent、detached

    下边是常见的翻译办法:
    ◆transient:瞬态或者自由态(new DeptPo(1,”行政部”,20,”行政相关”),该po的实例和session没有关联,该po的实例处于transient)
    ◆persistent:持久化状态(和数据库中记录想影射的Po实例,它的状态是persistent, 通过get和load等得到的对象都是persistent)
    ◆detached:脱管状态或者游离态
    (1)当通过get或load方法得到的po对象它们都处于persistent,但如果执行delete(po)时(但不能执行事务),该 po状态就处于detached, (表示和session脱离关联),因delete而变成游离态可以通过save或saveOrUpdate()变成持久态
    (2)当把session关闭时,session缓存中的persistent的po对象也变成detached

    Hibernate update和flush区别

    Hibernate update操作的是在自由态或脱管状态(因session的关闭而处于脱管状态)的对象//updateSQL,而flush是操作的在持久状态的对象。

    默认情况下,一个持久状态的对象的改动(包含set容器)是不需要update的,只要你更改了对象的值,等待Hibernate flush就自动更新或保存到数据库了。Hibernate flush发生在以下几种情况中:
    1, 调用某些查询的和手动flush(),session的关闭、SessionFactory关闭结合。get()一个对象,把对象的属性进行改变,把资源关闭。
    2,transaction commit的时候(包含了flush)

    Hibernate update和lock区别

    Hibernate update是把一个已经更改过的脱管状态的对象变成持久状态

    lock是把一个没有更改过的脱管状态的对象变成持久状态(针对的是因Session的关闭而处于脱管状态的po对象(2),不能针对因delete而处于脱管状态的po对象)

    对应更改一个记录的内容,两个的操作不同:
    ◆update的操作步骤是:属性改动后的脱管的对象的修改->调用update
    ◆lock的操作步骤是:调用lock把未修改的对象从脱管状态变成持久状态-->更改持久状态的对象的内容-->等待flush或者手动flush

    clear和evcit的区别

    clear完整的清除session缓存。evcit(obj)把某个持久化对象从session的缓存中清空。
    session.lock(xtyhb,LockMode.NONE);
    //表示直接到缓存中去找变成持久态的对象
    session.lock(xtyhb,LockMode.READ);
    //先通过ID读数据库该记录的ID看是否有该记录,如果有接着到缓存中去找变成持久态的对象

  • 相关阅读:
    整合springmvc+spring+mybatis
    springmvc 登录拦截器
    Python3.6.5 Win10安装numpy,scipy,scikit-learn,matplotlib
    windows+mysql+python+navicat入坑指南
    TP5 paginate()分页后给结果集追加字段和数据
    cropper+php+ajax 上传头像
    PHP base64转换成图片
    Echarts通过Ajax实现动态数据加载
    用php获取当天年份、月份、日及天数
    jquery对json 键值对或数组的增加、删除、遍历操作
  • 原文地址:https://www.cnblogs.com/sunwei2012/p/1637969.html
Copyright © 2011-2022 走看看