2.在持久化层,对象分为哪些状态?分别列出来. 
答:瞬时态(Transient)、持久态(Persistent)、脱管态(Detached)。 
瞬时态(Transient) 
是对象是创建时,瞬时对象在内存孤立存在,它是携带信息的载体,不和数据库的数据有任何关联关系,在Hibernate中,可通过session的save()或 saveOrUpdate()方法将瞬时对象与数据库相关联,并将数据对应的插入数据库中,此时该瞬时对象转变成持久化对象。

持久态(Persistent) 
是该对象在数据库中已有对应的记录,并拥有一个持久化标识,如果是用hibernate的delete()方法,对应的持久对象就变成瞬时对象,因数据库中的对应数据已被删除,该对象不再与数据库的记录关联。 
    当一个session执行close()或clear()、evict()之后,持久对象变成脱管对象,此时持久对象会变成脱管对象,此时该对象虽然具有数据库识别值,但它已不在hibernate持久层的管理之下。 
  持久对象具有如下特点: 
     1. 和session实例关联; 
     2. 在数据库中有与之关联的记录。

脱管态(Detached) 
当与某持久对象关联的session被关闭后,该持久对象转变为脱管对象。当脱管对象被重新关联到session上时,并再次转变成持久对象。 
       脱管对象拥有数据库的识别值,可通过update()、saveOrUpdate()等方法,转变成持久对象。 
       脱管对象具有如下特点: 
    1.本质上与瞬时对象相同,在没有任何变量引用它时,JVM会在适当的时候将它回收; 
   2. 比瞬时对象多了一个数据库记录标识值。

注意:flush只是将Hibernate缓存中的数据提交到数据库,如果这时数据库处在一个事物当中,则数据库将这些SQL语句缓存起来,当Hibernate进行commit时,会告诉数据库,你可以真正提交了,这时数据才会永久保存下来,也就是被持久化了.

load()和get()的区别

load加载方法:

Java代码

Users user = (Users)session.load(Users.class, userId); 
get加载方法: 
Java代码 
Users user = (Users)session.get(Users.class, userId);
两加载方法区别: 
区别1:如果数据库中,没有userId的对象。如果通过get方法加载,则返回的是一个null;如果通过load加载,则返回一个代理对象,如果后面有代码调用这个代理对象(如user)的某个属性(如user.getPassword())会抛出异 常:org.hibernate.ObjectNotFoundException; 
区别2:load支持延迟加载,get不支持延迟加载。 
也就是说: 
Java代码 
Users user = (Users)session.load(Users.class, userId); 
这句代码不会去执行数据库查询,只有用到user时才会去执行数据库查询。 
而: 
Java代码 
Users user = (Users)session.get(Users.class, userId); 
则立即去执行数据库查询。 所以Users user = (Users)session.load(Users.class, userId);不会执行任何sql。 
注意: 
Java代码 
Users user = (Users)session.load(Users.class, userId); 
System.out.println(user.getId());

上面这2句代码,不会去执行数据库操作。

因为load后会在hibernate的一级缓存里存放一个map对象,该map的key就是userId的值, 但是当你getId()时,它会去一级缓存里拿map的key值,而不去执行数据库查询。所以不会报任何错。不会执行任何数据库操作。

玩耍Hibernate之缓存的更多相关文章

  1. hibernate笔记--缓存机制之 二级缓存(sessionFactory)和查询缓存

    二级缓存(sessionFactory): Hibernate的二级缓存由SessionFactory对象管理,是应用级别的缓存.它可以缓存整个应用的持久化对象,所以又称为“SessionFactor ...

  2. Hibernate ——二级缓存

    一.Hibernate 二级缓存 1.Hibernate 二级缓存是 SessionFactory 级别的缓存. 2.二级缓存分为两类: (1)Hibernate内置二级缓存 (2)外置缓存,可配置的 ...

  3. hibernate一级缓存

    理解 Hibernate 一级缓存 Hibernate 一级缓存默认是打开,不需要任何的配置.实际上,你无法强制禁止它的使用. 如果你理解了一级缓存实际上和会话是关联的,就很容易理解一级缓存.总所周知 ...

  4. paip. 提升性能---hibernate的缓存使用 总结

    paip. 提升性能---hibernate的缓存使用 总结 作者Attilax  艾龙,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址:http://blog ...

  5. 配置Hibernate二级缓存时,不能初始化RegionFactory的解决办法

    配置Hibernate 二级缓存时,出现以下bug提示: SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder&quo ...

  6. Hibernate 所有缓存机制详解

    hibernate提供的一级缓存 hibernate是一个线程对应一个session,一个线程可以看成一个用户.也就是说session级缓存(一级缓存)只能给一个线程用,别的线程用不了,一级缓存就是和 ...

  7. [转] 关于hibernate的缓存使用

    http://blog.csdn.net/woshichenxu/article/details/586361 1.     关于hibernate缓存的问题: 1.1.1.         基本的缓 ...

  8. Hibernate的缓存技术详解

    转载注明出处:http://www.cnblogs.com/xiaoming0601/p/5882980.html 一.什么是缓存: 并不是指计算机的内存或者CPU的一二级缓存:缓存是指为了降低应用程 ...

  9. 记录Hibernate的缓存知识

    一.Hibernate缓存的作用 Hibernate是一个持久层框架,Hibernate要经常访问物理数据库.为了降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能,Hibernate的缓 ...

随机推荐

  1. javaSE第十二天

    第十二天    64 1. Scanner的使用(了解)    64 (1)在JDK5以后出现的用于键盘录入数据的类.    64 (2)构造方法:    64 (4)要掌握的两个方法    65 ( ...

  2. 卡通风格的连连看ios游戏源码

    卡通风格的连连看游戏源码,该游戏是一款韩国人做的卡通风格的ios连连看游戏源码,源码设计的效果非常漂亮的,而且运行起来感觉也很好.1.游戏采用倒计时模式2.该游戏是一款社交游戏,需要通过faceboo ...

  3. C# 集合 — Hashtable 线程安全

    基础知识重要吗?真的很重要. 就在笔者与同事聊天中突然同事提出一个问题,让笔都有点乱了手脚(有点夸张),题目是这样的: 问:Hashtable 是线程安全的吗? 答:…… (沉默中,Yes Or No ...

  4. CSS: word-wrap和word-break

    最近修改页面排版的一些问题,发现关于内容分词换行有两个主要的CSS: word-wrap 和 word-break 特别是word-wrap还有个取值break-word,更使得这两个属性容易混淆. ...

  5. Show Users Assigned to a Specific Role

    In a previous post I showed you how to know what Roles are assigned to a specific user. But here is ...

  6. 多屏判断css改写

    function replaceBodyClass(){ for(var i in map){ if(map[i](width)){ document.body.className = documen ...

  7. 往Android SDCard中读写入数据

    一.用Environment (写) 1.API获取sdcard的路径 File path=Environment.getExternalStorageDirectory(); path=new Fi ...

  8. Fix: Compile project encounter undefined reference to“xxx”error

    Need to add all the new cpp files to jni/Andriod.mk folder:

  9. iPhone图标及启动画面大小 xcode5

    启动画面 文件名   大小px Default.png 320*480 Default@2x.png 640*960 Default-568h@2x.png 640*1136 图标 文件名  大小px ...

  10. 简单快速的开发框架-SRF

    1.是什么 SRF(simply and rapid development framework) 一套基于asp.net mvc的开发框架,致力于提供简单.快速的企业应用开发方案,旨在解决企业应用开 ...