Hibernate中使用session的load(...)和get(...)区别:

1、load()方法是在返回的类被后期调用时,才会去提交SQL查询数据库。

2、get()方法是在调用get()时就即时提交SQL查询数据库。

3、load()方法如果查找不到数据,会抛出ObjectNotFoundException的异常。

4、get()方法如果查找不到数据,不会抛异常,但会返回一个null对象。

5、load()和get(),都会先到session的缓存中查找,如果找到,直接缓存返回对象,如果找不到才去数据库查找对象。

6、均可以使用session.evict()方法清除缓存。

示例:

  1. package com.my.init;
  2.  
  3. import org.hibernate.ObjectNotFoundException;
  4. import org.hibernate.Session;
  5. import org.hibernate.Transaction;
  6.  
  7. import com.my.bean.User;
  8. import com.my.dao.util.HibernateUtil;
  9.  
  10. public class Test {
  11.  
  12. public static void main(String[] args) {
  13. Session session = HibernateUtil.getSessionFactory().openSession();
  14. Transaction tx = session.beginTransaction();
  15.  
  16. try {
  17. // ---------------------------------------------------------
  18. // Load class
  19. // ---------------------------------------------------------
  20. User user1 = (User) session.load(User.class, (long) 1);
  21. System.out.println("Load class");
  22. System.out.println("User name:" + user1.getUserName());
  23.  
  24. // ---------------------------------------------------------
  25. // Get class
  26. // ---------------------------------------------------------
  27. User user2 = (User) session.get(User.class, (long) 2);
  28. System.out.println("Get class");
  29. System.out.println("User name:" + user2.getUserName());
  30.  
  31. // ---------------------------------------------------------
  32. // Load cache class
  33. // ---------------------------------------------------------
  34. User user3 = (User) session.load(User.class, (long) 1);
  35. System.out.println("Load cache class");
  36. System.out.println("User name:" + user3.getUserName());
  37.  
  38. // ---------------------------------------------------------
  39. // Get cache class
  40. // ---------------------------------------------------------
  41. User user4 = (User) session.get(User.class, (long) 2);
  42. System.out.println("Get cache class");
  43. System.out.println("User name:" + user4.getUserName());
  44.  
  45. try {
  46. // ---------------------------------------------------------
  47. // Load class throw ObjectNotFoundException
  48. // ---------------------------------------------------------
  49. User user5 = (User) session.load(User.class, (long) 3);
  50. System.out.println("User name:" + user5.getUserName());
  51. } catch (ObjectNotFoundException e) {
  52. System.out.println("Load class throw ObjectNotFoundException");
  53. }
  54.  
  55. // ---------------------------------------------------------
  56. // Get class return null
  57. // ---------------------------------------------------------
  58. User user6 = (User) session.get(User.class, (long) 3);
  59. if (user6 == null) {
  60. System.out.println("Get class return null");
  61. }
  62.  
  63. // ---------------------------------------------------------
  64. // Remove User cache
  65. // ---------------------------------------------------------
  66. session.evict(user1);
  67. User user7 = (User) session.load(User.class, (long) 1);
  68. System.out.println("Load class");
  69. System.out.println("User name:" + user7.getUserName());
  70.  
  71. // ---------------------------------------------------------
  72. // Remove User cache
  73. // ---------------------------------------------------------
  74. session.evict(user2);
  75. User user8 = (User) session.get(User.class, (long) 2);
  76. System.out.println("Get class");
  77. System.out.println("User name:" + user8.getUserName());
  78.  
  79. // ---------------------------------------------------------
  80. // Remove session all cache
  81. // ---------------------------------------------------------
  82. session.clear();
  83.  
  84. tx.commit();
  85. } catch (Exception e) {
  86. tx.rollback();
  87. e.printStackTrace();
  88. }
  89.  
  90. session.close();
  91. }
  92.  
  93. }

上面代码的执行结果:

[Hibernate] - Load and Get的更多相关文章

  1. Hibernate load 和 Get的区别

    load和get都可以取回一个对象,难道是方法重复吗?绝对不可能,那它们到底有那些区别呢? 在http://blog.chinaunix.net/u/484/showart_1093166.html这 ...

  2. hibernate的get、load的方法的区别,IllegalArgument异常

    关于hibernate中的load,get,以及延迟加载问题 今天在使用hibernate时,发现一异常: could not initialize proxy - no Session 查询资料之后 ...

  3. JAVA Hibernate工作原理及为什么要用

    hibernate 简介:hibernate是一个开源框架,它是对象关联关系映射的框架,它对JDBC做了轻量级的封装,而我们java程序员可以使用面向对象的思想来操纵数据库.hibernate核心接口 ...

  4. Hibernate的面试题

    1.Hibernate工作原理和为什么要用? 原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory 3.打开Session 4.创建事务Transation 5.持 ...

  5. Hibernate框架的总结

    hibernate 简介:hibernate是一个开源框架,它是对象关联关系映射的框架,它对JDBC做了轻量级的封装,而我们java程序员可以使用面向对象的思想来操纵数据库.hibernate核心接口 ...

  6. JAVA Hibernate工作原理及为什么要用(转)

    hibernate 简介:hibernate是一个开源框架,它是对象关联关系映射的框架,它对JDBC做了轻量级的封装,而我们java程序员可以使用面向对象的思想来操纵数据库.hibernate核心接口 ...

  7. 在使用hibernate的getHibernateTemplate()时怎么让控制台输出封装好的SQL? 怎么用日志打印出来?

    我们在使用 Hibernate 时一般只会关注是否显示生成的 SQL 语句,不过有些时候还不够.默认时 Hibernate 执行的 SQL 语句是打印在控制台上的,它也可以配置为输出给 Log4J 或 ...

  8. 灵活控制 Hibernate 的日志或 SQL 输出,以便于诊断

    我们在使用 Hibernate 时一般只会关注是否显示生成的 SQL 语句,不过有些时候还不够.默认时 Hibernate 执行的 SQL 语句是打印在控制台上的,它也可以配置为输出给 Log4J 或 ...

  9. (转)灵活控制 Hibernate 的日志或 SQL 输出,以便于诊断

    背景:项目开发需要.之前对于hibernate日志输出,log4j的绑定,之间的关系一直不是很清楚.终于找到一篇介绍的很详细的文章. 文章出处:https://unmi.cc/hibernate-lo ...

随机推荐

  1. 深度理解Key-Value Observing 键值观察

    前言   在上一阶段的开发过程中,我们大量使用了 KVO 机制,来确保页面信息的及时同步.也因此碰到了很多问题,促使我们去进一步学习 KVO 的相关机制,再到寻找更好的解决方案.鉴于 KVO 让人欲仙 ...

  2. Threads Events QObjects

    Events and the event loop Being an event-driven toolkit, events and event delivery play a central ro ...

  3. 【转】ROC和AUC介绍以及如何计算AUC

    转自:https://www.douban.com/note/284051363/ ROC(Receiver Operating Characteristic)曲线和AUC常被用来评价一个二值分类器( ...

  4. USB Packet Types

    USB has four different packet types. Token packets indicate the type of transaction to follow, data ...

  5. R 学习1

    首先安装吧 http://cran.rstudio.com/bin/windows/base/R-3.2.1-win.exe 里面既有32位又有64. R有很多包,如果有的包本地没有,来这里搜 htt ...

  6. 关于string的练习题目

    /*Are they equal*/#include<iostream>#include<string>using namespace std;int n;string dea ...

  7. jquery商城购物车右侧悬浮加入购物车动画效果

    <script type="text/javascript" src="js/jquery-1.7.min.js"></script> ...

  8. SQL注入测试平台 SQLol -5.DELETE注入测试

    访问首页的delete模块,http://127.0.0.1/sql/delete.php,开始对delete模块进行测试. delete语法: DELETE FROM [users] WHERE [ ...

  9. Makefile---make内嵌函数及make命令显示 (九)

    原创博文,转载请标明出处--周学伟http://www.cnblogs.com/zxouxuewei/ 这一节我们讲一下make的函数,在之前的章节已经讲到了几个函数:wildcard.patsubs ...

  10. TFTP网络协议分析---15

    TFTP网络协议分析 周学伟 文档说明:所有函数都依托与两个出口,发送和接收. 1:作为发送时,要完成基于TFTP协议下的文件传输,但前提是知道木的PC机的MAC地址,因为当发送TFTP请求包时必须提 ...