• Hibernate 对象的三种状态


     

    Hibernate中性能优化涉及的知识点:

      对象的三种状态

      一级缓存和快照

      延迟加载策略

      抓取策略

      整合c3p0连接池

      二级缓存

    Hibernate中对象的三种状态:

        临时态(Transient):

        没有被session管理,没有OID

        瞬时态对象不会被持久化到数据库中,也不会被赋予持久化标识(identifier)

        如果瞬时态对象在程序中没有被引用,会被gc销毁

        又称瞬时态

      持久态(Persistent)

        被session管理,有OID

        处于持久态的对象也成为PO(Persistent Object),PO可以直接影响到数据库的数据

        在数据库中有对应的记录,并拥有持久化标识

        Hibernate会检测PO的任何改动,在当前操作单元执行完毕后将对象数据与数据库同步,不需要手动执行update

      游离态(Detached):

        没有被session管理,有OID

        与PO关联的session被关闭后,对象就变成游离态

        对游离态对象的引用依然有效,对象可以被继续修改

        游离态对象如果重新被关联到某个session上,会再次变为PO

        又称脱管态

      参考链接:

        http://blog.csdn.net/redarmy_chen/article/details/7069482

        http://blog.csdn.net/mr_linjw/article/details/45249363 

      Test:

            //临时态:没有被session管理,没有OID
            Customer c = new Customer();
            c.setName("draco");
            System.out.println("OID1:"+c.getId());
            
            //持久态:被session管理,有OID
            session.save(c);
            System.out.println("OID2:"+c.getId());
            
            //游离态:没有被session管理,有OID
            tx.commit();
            session.close();
            System.out.println("OID3:"+c.getId());

      Console:

    OID1:null
    Hibernate: 
        insert 
        into
            t_customer
            (c_name, c_gender, c_age, c_level) 
        values
            (?, ?, ?, ?)
    OID2:16
    OID3:16

    Hibernat对象三种状态的生命周期: 

  • 相关阅读:
    cmake的安装
    安装cmake过程g++: 错误:unrecognized command line option ‘-std=gnu++14’
    进程空间分配
    git 基本操作
    nm命令
    container_of 宏
    cmake
    fiddler修改Requests之前的数据和response 之后的数据
    Fiddler抓包请求前设置断点
    jmeter连接mysql数据库
  • 原文地址:https://www.cnblogs.com/roxy/p/7639693.html
Copyright © 2020-2023  润新知