zoukankan      html  css  js  c++  java
  • day30_Hibernate复习_02(补刀)

    一、对象的三种状态和一级缓存

      对象的三种状态:
        瞬时态:对象刚刚创建,没有与session关联,没有ID
        持久态:已经和Session关联,有ID
        游离态:没有和session关联,有ID

        瞬时=>持久   save/persist
        瞬时=>游离   setId
        持久=>游离   close/evict/clear
        持久=>瞬时   close/evict/clear 再 将ID设置为null
        游离=>瞬时   将ID设置为null
        游离=>持久   update/saveOrUpdate

      持久状态的特性:持久对象的所有变化,会被自动同步到数据库中。

      一级缓存:
        Hibernate中有两种缓存:线程级别的session缓存 和 进程级别的sessionFactory缓存(不久就会学到啦)

      在Session对象中,有一个缓存。
      本质:Map集合、键是ID、值是对象,Hibernate会把所有查询到的对象,放入缓存中。
            如果再次查询相同的对象,会先从缓存中找。目的:为了提高效率。

      快照:快照是为了对比缓存中的对象是否发生变化,来决定事务提交时,是否需要修改数据。

      其他api:
        evict();    将缓存中的对象移除
        clear();    清空一级缓存
        refresh(Object);    刷新 => 强制刷新缓存中的对象 => (可以用来解决缓存与数据库数据不同步的问题(局部解决))
        flush();    对比快照,并提交缓存对象
        saveOrUpdate(Object);    可以同时完成保存或更新操作
        save/persist
        HQL/SQL/Criteria与缓存的关系 => 查询到的对象会放入缓存中,但是每次查询都要发送sql语句。

    二、多表设计:一对多 和 多对一

      一对多的表达:
        在数据库表中如何表达一对多关系:在多的一方的表中加入外键,引用的是一的一方的主键。
        在对象中如何表达一对多关系:在一的一方使用集合表达持有多的一方,在多的一方引用一的一方的对象。
        在配置文件中如何表达一对多关系:
          一方:
            <set name="一的一方属性的集合名称" >
              <key column="多的一方的外键名称" />
              <one-to-many class="多的一方所属对象的完整类名" />
            </set>
          多方:
            <many-to-one name="多的一方属性的引用名称" column="多的一方的外键名称" class="一的一方所属对象的完整类名" />

      一对多的操作:
        inverse:一的一方要不要放弃维护外键关系,默认值是:false
        cascade:取值有:
          save-update    级联保存和级联修改
          delete    级联删除
          delete-orphan    孤儿删除
          all    save-update + delete
          all-delete-orphan   save-update + delete + delete-orphan

  • 相关阅读:
    php中静态变量和静态方法。
    json_encode处理json数据中文乱码
    php 连接mssql
    二十二 使用__slots__
    二十一 实例属性和类属性
    二十 获取对象信息
    十九 继承和多态
    十八 访问限制
    十七 类和实例
    NoSql数据库 设计上面的一些心得
  • 原文地址:https://www.cnblogs.com/chenmingjun/p/9296408.html
Copyright © 2011-2022 走看看