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看是否有该记录,如果有接着到缓存中去找变成持久态的对象

  • 相关阅读:
    leetcode-Single Number
    设计模式六大原则(4)——接口隔离原则
    设计模式六大原则(3)——依赖倒置原则
    设计模式六大原则(2)——里氏替换原则
    设计模式六大原则(1)——单一职责原则
    观察者模式
    转:画图工具
    android 博客列表
    app crash率的标准
    查看某一个开发者代码修改量的脚本(ios平台可用)
  • 原文地址:https://www.cnblogs.com/sunwei2012/p/1637969.html
Copyright © 2011-2022 走看看