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. GitHub入门教程 Hello World for GitHub

          Intro                              1.简介 What is GitHub?           2.什么是github? Create a Reposi ...

  2. windows环境下跑hadoop自带的wordcount遇到的问题

    hadoop环境自己之前也接触过,搭建的是一个伪分布的环境,主从节点都在我自己的机子上,即127.0.0.1,当初记得步骤很多很麻烦的样子(可能自己用ubuntu还不够熟练),包括myeclipse. ...

  3. JDK和tomcat环境变量配置

    JDK环境变量配置:   如果你的JDK安装在C盘里,如:C:\Program Files\Java\jdk1.6.0_05, 那么就在系统变量里(当然也可以在用户变量里)点新建: 变量名:JAVA_ ...

  4. vs2010统计项目代码总行数

    按CTRL+SHIFT+F (Find in files),勾上支持正则表达式,然后输入搜索内容: ^:b*[^:b#/]+.*$ 找到最后一行就是结果

  5. Elasticsearch 连接查询

    在一般的关系型数据库中,都支持连接操作. 在ES这种分布式方案中进行连接操作,代价是十分昂贵的. 不过ES也提供了相类似的操作,支持水平任意扩展,实现连接的效果. 其他内容,参考Elasticsear ...

  6. html/css基础篇——GET和POST的区别

    本文前面部分转自木-叶的博文,后面有本人自己的一些总结和体会. 如果有人问你,GET和POST,有什么区别?你会如何回答? 我的经历 前几天有人问我这个问题.我说GET是用于获取数据的,POST,一般 ...

  7. 关于SQL递归查询在不同数据库中的实现方法

    比如表结构数据如下: Table:Tree ID Name ParentId 1 一级  0 2  二级 1 3  三级 2 4 四级 3 SQL SERVER 2005查询方法: //上查 with ...

  8. CSS基础-插曲

    CSS学习 1:通过css来设置边框的颜色 我们可以通过border:10px solid red;来统一的设置颜色,但是我们有的时候需要每个边框的颜色不一样,我们就需要通过各自设置的方法来设置边框的 ...

  9. 兼容各浏览器的iframe - onlaod事件

    上次工作中,在使用 Iframe+FormSubmit进行无刷新提交时,如果后台返回的数据有延迟,或者浏览器对Iframe内容的更改过慢的话,会遇到onload响应在Iframe内容改变之前触发,这也 ...

  10. ASP.NET MVC系列:添加模型

    模型(Model)是应用程序中用于处理应用程序数据逻辑的部分;通常模型对象在数据库中存取数据 添加模型类 在解决方案中右击Models文件夹,然后选择“添加”,在“添加”项里选择“类”:或者选中Mod ...