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

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

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

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

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

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

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

示例:

package com.my.init;

import org.hibernate.ObjectNotFoundException;
import org.hibernate.Session;
import org.hibernate.Transaction; import com.my.bean.User;
import com.my.dao.util.HibernateUtil; public class Test { public static void main(String[] args) {
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction tx = session.beginTransaction(); try {
// ---------------------------------------------------------
// Load class
// ---------------------------------------------------------
User user1 = (User) session.load(User.class, (long) 1);
System.out.println("Load class");
System.out.println("User name:" + user1.getUserName()); // ---------------------------------------------------------
// Get class
// ---------------------------------------------------------
User user2 = (User) session.get(User.class, (long) 2);
System.out.println("Get class");
System.out.println("User name:" + user2.getUserName()); // ---------------------------------------------------------
// Load cache class
// ---------------------------------------------------------
User user3 = (User) session.load(User.class, (long) 1);
System.out.println("Load cache class");
System.out.println("User name:" + user3.getUserName()); // ---------------------------------------------------------
// Get cache class
// ---------------------------------------------------------
User user4 = (User) session.get(User.class, (long) 2);
System.out.println("Get cache class");
System.out.println("User name:" + user4.getUserName()); try {
// ---------------------------------------------------------
// Load class throw ObjectNotFoundException
// ---------------------------------------------------------
User user5 = (User) session.load(User.class, (long) 3);
System.out.println("User name:" + user5.getUserName());
} catch (ObjectNotFoundException e) {
System.out.println("Load class throw ObjectNotFoundException");
} // ---------------------------------------------------------
// Get class return null
// ---------------------------------------------------------
User user6 = (User) session.get(User.class, (long) 3);
if (user6 == null) {
System.out.println("Get class return null");
} // ---------------------------------------------------------
// Remove User cache
// ---------------------------------------------------------
session.evict(user1);
User user7 = (User) session.load(User.class, (long) 1);
System.out.println("Load class");
System.out.println("User name:" + user7.getUserName()); // ---------------------------------------------------------
// Remove User cache
// ---------------------------------------------------------
session.evict(user2);
User user8 = (User) session.get(User.class, (long) 2);
System.out.println("Get class");
System.out.println("User name:" + user8.getUserName()); // ---------------------------------------------------------
// Remove session all cache
// ---------------------------------------------------------
session.clear(); tx.commit();
} catch (Exception e) {
tx.rollback();
e.printStackTrace();
} session.close();
} }

上面代码的执行结果:

[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. 集合视图控制器(CollectionViewController) 、 标签控制器(TabBarController) 、 高级控件介绍

    1 创建集合视图,设置相关属性以满足要求 1.1 问题 集合视图控制器UIConllectionViewController是一个展示大量数据的控制器,系统默认管理着一个集合视图UICollectio ...

  2. Python3 配置文件 解析

    /************************************************************************ * Python3 配置文件 解析 * 说明: * ...

  3. 简明python教程 --C++程序员的视角(八):标准库

    os模块 这个模块包含普遍的操作系统功能. 如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的.一个例子就是使用os.sep可以取代操作系统特定的路径分割符. os.system() 执行li ...

  4. Android Packaging Problem

    android Description Resource Path Location Type Error generating final archive: Debug Certificate ex ...

  5. java访问webservce,保持会话,服务端保存session验证

    在进行程序开发的过程中,遇到一个问题,怎么保持会话. 因为一帮进行方法调用很少涉及到即时身份验证的. 例如: 1:客户端登录后服务端保存登录用户信息: 2:客户端持有验证通过key再次请求: 3:服务 ...

  6. css ul li 水平布局问题

    可以有俩种方法,暂时只用float:left:   找到每一个li进行水平浮动 #hd_nav li{ border-right: 1px solid rgba(255,255,255,0.2); f ...

  7. ios多语言设置,操作

    多语言在应用程序中一般有两种做法:一.程序中提供给用户自己选择的机会: NSArray *languages = [NSLocale preferredLanguages]; NSString *cu ...

  8. HDU-4003 Find Metal Mineral (树形DP+分组背包)

    题目大意:用m个机器人去遍历有n个节点的有根树,边权代表一个机器人通过这条边的代价,求最小代价. 题目分析:定义状态dp(root,k)表示最终遍历完成后以root为根节点的子树中有k个机器人时产生的 ...

  9. 英语语法最终珍藏版笔记- 21it 用法小结

    it 用法小结 it 在英语中的意思较多,用法较广,现总结如下. 一.it作句子的真正主语 1.it 指前面已经提到过的人或事物,有时指心目中的或成为问题的人或事物,作真正主语. 例如: What’s ...

  10. 继承:《原型和原型链(prototype 属性使您有能力向对象添加属性和方法。)》

    二. 原型对象   在JavaScript 中,每当定义一个对象(函数)时候,对象中都会包含一些预定义的属性.其中函数对象的一个属性就是原型对象 prototype.注:普通对象没有prototype ...