1.一级缓存(session缓存 )、二级缓存
 
   意义:提高hibernate查询效率。
   缺点:可能会因并发,产生数据不一致。
 
   本质:基于session 的缓存,利用hiberate执行查询的时候,hibernate会首先从session缓存去找,如果存在,则直接返回,如果不存在,则利用orm执行查询  将得到的对象保存至session缓存。
 
   可以使用session.evict(obj);将obj从session缓存移除。
 
   注意:一级缓存,自动开启着的。
 
public class Text1{
     public static void main(String[] args){
         //创建SessionFactory
          SessionFavtory sessionFactory = null;
         //创建Session
          Session session  = null;
          //事务
          Transaction tx = null;
          try{
               sessionFactory = new Configuration.configure().buildSessionFactory();
               session = sessionFactory.getCurrentSession();
               //开启事务
               tx = sesison.beginTransaction();
               UserInfo u1 = new UserInfo("9989","sd","23");
               system.out.priint("-----------");
               session.evict(u1);
               UserInfo u2 = new UserInfo("9989","sd","23");
 
               //执行U对象 操作 保存
               Session.save(u);
                //提交
               tx.commit();
          }catch(Exception e){
               e.printStackTrace();
               //事务回滚
               tx.rollback();
          }
     }
}
 
二级缓存 :也叫 sessionFactory缓存。
 
   本质: 基于sessionFactory的缓存,利用hiberate执行查询的时候,hibernate会首先从session缓存去找,如果存在,则直接返回,如果不存在,则去二级缓存找,存在则返回,不存利用orm执行查询  将得到的对象保存至session缓存,可以存至二级缓存。
 
   注意:二级缓存需要在sessionFactory配置文件中,进行两处配置。
  (a.配置启用二级缓存)
  (b.配置二级缓存实现类)
    需要对缓存本身进行专门配置。
  (xxx.xml--配置缓存)
 
   适用场合:频繁查询,极少修改的对象。
 
2.延迟加载
 
  hibernate下延迟加载:
  load执行查询的时候,返回hiberate代理对象。
 
   当操作其非主属性的时候(Hibernate.initialize(proxy)),才会利用orm执行查询。   
 
  load/get 区别?
 
   load:  默认  延迟加载  
   查不到: 抛出异常      
   get: 即可加载
   查不到: 返回null
 
public class Text1{
     public static void main(String[] args){
         //创建SessionFactory
          SessionFavtory sessionFactory = null;
         //创建Session
          Session session  = null;
          //事务
          Transaction tx = null;
          try{
               sessionFactory = new Configuration.configure().buildSessionFactory();
               session = sessionFactory.getCurrentSession();
               //开启事务
               tx = sesison.beginTransaction();
               UserInfo u1 = (UserInfo)session.load(UserInfo.class,"1001");
               system.out.print("-----------");
               system.out.print(u1.getUse_pwd;    
                Hibernate.initilize(u1);        
                //提交
               tx.commit();
          }catch(Exception e){
               e.printStackTrace();
               //事务回滚
               tx.rollback();
          }
     }
}
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.it.bean">
    <class name="UserInfo" table="userInfo" lazy="true">    <!--是(true)否(false)延迟加载-->
        <id name="user_id" column="user_id">
            <!-- 主键生成策略 -->
            <generator class="assigned"></generator>
        </id>
        <property name="user_pwd" column="user_pwd"></property>
        <property name="user_sex" column="user_sex"></property>
 
 
3.hibernate 、session域 、pojo(java Bean的对象)三种状态
 
  研究的session 域 /数据库 (oid-pk) 与 pojo 关系
 
  瞬时态(临时态):数据库无 session无
 
  持久态: session域 有 save/saveOrupdate/get/load/....
               对持久态pojo操作,在事务提交前将会被 hibernate  利用 orm  同步到数据库。
 
  脱管态(游离态): 数据库存在,而session 无
 
  注意:session中不能有两个不同的对象,拥有一样的oid。
            delete-(脱管态)-->持久态--->瞬时态
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

一级缓存、二级缓存、延迟加载、hibernate session 域 pojo三种状态的更多相关文章

  1. Hibernate中对象的三种状态以及Session类中saveOrUpdate方法与merge方法的区别

    首先,用一张图说明一个对象,在Hibernate中,在调用了不同方法之后对象所处的不同状态 在Hibernate中,一个对象的状态可以被分为如图所示的三种 Transient:瞬时对象,该对象在数据库 ...

  2. Hibernate持久化对象的三种状态深入理解

    关于OID hibernate缓存是一个map,他会根据OID作为缓存对象的key,我们的映射文件中<id>标签指定的属性值会作为OID 持久化对象的三种状态 为了方便理解,Hiberna ...

  3. 【SSH系列】-- Hibernate持久化对象的三种状态

    在上一篇博文中,小编主要简单的介绍了[SSH系列]--hibernate基本原理&&入门demo,今天小编来继续介绍hibernate的相关知识, 大家知道,Java对象的生命周期,是 ...

  4. Hibernate中对象的三种状态即save(),update(),saveOrUpdate()的使用【转】

    当new一个user的时候,是处于瞬时状态 当调用session.save(user)的时候,user对象会放到session里,此时处于持久状态 当提交事务的时候,user对象才会存到DB中 当调用 ...

  5. Hibernate之对象的三种状态

    Hibernate之Java对象的三种状态 一.简述 本博文大部分的思想和内容引子CSND上名为 FG2006 这位大神的文章,连接地址为:http://blog.csdn.net/fg2006/ar ...

  6. Hibernate中对象的三种状态及相互转化

    1. 瞬时状态 (Transient) 当我们通过Java的new关键字来生成一个实体对象时,这时这个实体对象就处于自由状态,如下:  Customer customer=new Customer(“ ...

  7. hibernate 实体对象的三种状态以及转换关系。

    最新的Hibernate文档中为Hibernate对象定义了四种状态(原来是三种状态,面试的时候基本上问的也是三种状态),分别是:瞬时态(new, or transient).持久态(managed, ...

  8. JavaWeb_(Hibernate框架)Hibernate中对象的三种状态

    对象的三种状态 瞬时状态: 实体 没有id.没有与session关联 持久化状态: 特点:持久化状态对象的任何改变都会同步到数据库中 游离态[也称作托管态]: 实体 有id,没有与session关联 ...

  9. Hibernate对象持久化的三种状态

    1.三种状态: public static void testSel() { Session session = HibernateUtils.openSession(); Transaction t ...

随机推荐

  1. 关于有默认值的字段在用EF做插入操作时的思考

    今天在用EF做插入操作的时候发现数据库中一个datetime类型的字段(CreateDate)的值居然全部为null.于是赶紧看表结构发现CreateDate字段居然是允许为空的. 虽然为空,但是设置 ...

  2. Moon River

    读书笔记系列链接地址http://www.cnblogs.com/shoufengwei/p/5714661.html.        昨晚无意中听到了一首英文歌曲,虽不知其意,但是瞬间就被优美的旋律 ...

  3. 推荐20个很有帮助的 Web 前端开发教程

    在平常的搜索中,我碰到过很多有趣的信息,应用程序和文档,我把它们整理在下面这个列表.这是收藏的遇到的有用内容的一个伟大的方式,可以在你需要的时候方便查阅.相信你会在这个列表中发现对你很有用的资料. 您 ...

  4. C#语法糖(Csharp Syntactic sugar)大汇总

    首先需要声明的是"语法糖"这个词绝非贬义词,它可以给我带来方便,是一种便捷的写法,编译器会帮我们做转换:而且可以提高开发编码的效率,在性能上也不会带来损失.这让java开发人员羡慕 ...

  5. VS2015 新Web项目(C#6)出现CS1617错误的解决

    VS2015新增了对C#6的支持. 在新的Web项目模板中通过引入nuget包Microsoft.CodeDom.Providers.DotNetCompilerPlatform:1.0.0并在web ...

  6. 浅谈Dictionary用法

    一.基础篇 1.Dictionary泛型类提供了从一组键到一组值的映射,即键和值的集合类. 2.Dictionary通过键来检索值的速度是非常快的,这是因为 Dictionary 类是作为一个哈希表来 ...

  7. winform自定义日期控件,要求可以手动输入日期DatePicker

    要求:文本框中能手动输入数字,向上箭头根据鼠标位置给年月日递增,向下箭头递减 一:页面加载时: private void FlatDatePicker_Load(object sender, Even ...

  8. MySQL MHA配置常见问题

    MHA在MySQL数据库中被广泛使用,它小巧易用,功能强大,实现了基于MySQL replication架构的自手动主从故障转移,从库重定向到主库并自动同步.尽管如此,在部署配置的过程中,由于疏忽总难 ...

  9. 介绍开源的.net通信框架NetworkComms框架 源码分析(十九 )ConnectionIncomingData

    原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架  作者是英国人  以前是收费的 目前作者已经开源  许可是 ...

  10. Kinect V2 基础教程之彩色图像

    本程序为自己所写,参考素材包括微软官方例子和外文资料,自己做了部分的优化.解释的如果有问题,恳请大家指正. 后台代码: using System.ComponentModel; using Syste ...