zoukankan      html  css  js  c++  java
  • 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对象三种状态的生命周期: 

  • 相关阅读:
    OC,iOS浮点型数据的计算不正确问题
    Swift中AVFoundation的简单使用
    一款经典的stick footer布局
    swift获取当前活动的viewcontroller
    xib的NSLayoutConstraint是否有效
    bootstrap的quartz定时任务简单使用
    Python实现:某个用户登录后,查看自己拥有所有权限
    ftp作业
    实现计算器
    面向对象作业——校园管理系统
  • 原文地址:https://www.cnblogs.com/roxy/p/7639693.html
Copyright © 2011-2022 走看看