zoukankan      html  css  js  c++  java
  • OID,主键生成策略,PO VO DTO,get和load区别,脏检查,快照,java对象的三种状态

    主键生成策略

    sequence 数据库端

    native 数据库端

    uuid  程序端 自动赋值 生成的是一个32位的16进制数  实体类需把ID改成String 类型

    assigned  程序端 需手动给值

    <?xml version='1.0' encoding='utf-8'?>
    <!DOCTYPE hibernate-mapping PUBLIC 
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
     
     <hibernate-mapping package="entity">
         <class name="Student" table="Student">
             <id name="id" type="int" column="id">
             <generator class="uuid"></generator>
             </id>
             <property name="name" type="string" column="name"/>
             <property name="age" type="int" column="age"/>
         </class>    
     </hibernate-mapping>

     2. load()和gat()的区别

    Load()没有使用对象的其他属性的时候,没有SQL 延迟加载  因为代理对象的出现 才导致延迟加载。

     

       

    Get()没有使用对象的其他属性的时候,也生成了SQL 立即加载

     java对象的三种状态

    持久态

    Student stu=new Student();
    Session.save(stu);
    Session有的,DB中也会有。

    游离态

    stu.setId(1);
    手里有OID,但是DB中没有
    DB中,session没有的瞬时态

    瞬时态

    Student stu=new Student

    体现:在session中以及DB都没有

    脏检查(如图所示)

    脏检查及刷新缓存机制

       脏检查:当事务提交时,Hiberante会对Session中持久状态的对象进行检测,判断对象的数据是否发生了改变

       依据:

       为什么要进行脏检查?

       解析:如果对象发生了改变,就需要将改变更新到数据库中,以确保内存中的对象与数据库中的数据保持一致。

       如何脏检查?

     解析:当一个Dept对象被加入到Session缓存(有人又称为 一级缓存  后者是内部缓存)中时,Session会为Dept对象的值类型的属性复制一份快照

     当Session刷新缓存时,会先进行脏检查,即比较Dept对象的当前属性与它的快照,来判断Dept对象的属性是否发生了变化。

     如果发生了变化,Session会根据脏对象的最新属性值来执行相关的SQL语句,将变化更新到数据库中。

       Session具有一个缓存,可以管理和跟踪所有持久化对象,对象和数据库中的相关记录对应。

  • 相关阅读:
    设计模式(十)外观模式
    设计模式(九)装饰器模式
    设计模式(八)组合模式
    设计模式(七)桥接模式
    设计模式(六)代理模式
    设计模式(五)适配器模式
    linux 安装 node
    LeetCode 335. Self Crossing
    LeetCode 332. Reconstruct Itinerary 最小欧拉路径
    LeetCode 327. Count of Range Sum 区间和的个数
  • 原文地址:https://www.cnblogs.com/lizeyang/p/5817789.html
Copyright © 2011-2022 走看看