[Hibernate] - Load and Get
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的更多相关文章
- Hibernate load 和 Get的区别
load和get都可以取回一个对象,难道是方法重复吗?绝对不可能,那它们到底有那些区别呢? 在http://blog.chinaunix.net/u/484/showart_1093166.html这 ...
- hibernate的get、load的方法的区别,IllegalArgument异常
关于hibernate中的load,get,以及延迟加载问题 今天在使用hibernate时,发现一异常: could not initialize proxy - no Session 查询资料之后 ...
- JAVA Hibernate工作原理及为什么要用
hibernate 简介:hibernate是一个开源框架,它是对象关联关系映射的框架,它对JDBC做了轻量级的封装,而我们java程序员可以使用面向对象的思想来操纵数据库.hibernate核心接口 ...
- Hibernate的面试题
1.Hibernate工作原理和为什么要用? 原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory 3.打开Session 4.创建事务Transation 5.持 ...
- Hibernate框架的总结
hibernate 简介:hibernate是一个开源框架,它是对象关联关系映射的框架,它对JDBC做了轻量级的封装,而我们java程序员可以使用面向对象的思想来操纵数据库.hibernate核心接口 ...
- JAVA Hibernate工作原理及为什么要用(转)
hibernate 简介:hibernate是一个开源框架,它是对象关联关系映射的框架,它对JDBC做了轻量级的封装,而我们java程序员可以使用面向对象的思想来操纵数据库.hibernate核心接口 ...
- 在使用hibernate的getHibernateTemplate()时怎么让控制台输出封装好的SQL? 怎么用日志打印出来?
我们在使用 Hibernate 时一般只会关注是否显示生成的 SQL 语句,不过有些时候还不够.默认时 Hibernate 执行的 SQL 语句是打印在控制台上的,它也可以配置为输出给 Log4J 或 ...
- 灵活控制 Hibernate 的日志或 SQL 输出,以便于诊断
我们在使用 Hibernate 时一般只会关注是否显示生成的 SQL 语句,不过有些时候还不够.默认时 Hibernate 执行的 SQL 语句是打印在控制台上的,它也可以配置为输出给 Log4J 或 ...
- (转)灵活控制 Hibernate 的日志或 SQL 输出,以便于诊断
背景:项目开发需要.之前对于hibernate日志输出,log4j的绑定,之间的关系一直不是很清楚.终于找到一篇介绍的很详细的文章. 文章出处:https://unmi.cc/hibernate-lo ...
随机推荐
- AttributeError: 'module' object has no attribute 'TornadoAsyncNotifier'
/*************************************************************************** * AttributeError: 'modu ...
- EASYRECOVERY_3.3.29包含注册机、都教授数据恢复含注册码
用EASYRECOVERY恢复过U盘,和回收站永久清空的东西.效果很好.但疑惑doc,docx,后者恢复效果特别好 都教授没用过,别人买的,没用,很贵. 每次用,都找不着,还要重新淘宝买.这次分享给大 ...
- iOS学习笔记---c语言第十天
动态内存分配 一.存储区划分 从低到高(内存地址小----内存地址大) : 代码区---常量区---静态区---堆区---栈区 栈内存 //凡是在函数体内定义的变量 都存储在栈区(包括形参). ; ...
- springmvc学习笔记--REST API的异常处理
前言: 最近使用springmvc写了不少rest api, 觉得真是一个好框架. 之前描述的几篇关于rest api的文章, 其实还是不够完善. 比如当遇到参数缺失, 类型不匹配的情况时, 直接抛出 ...
- abap append 用法
[转自http://blog.chinaunix.net/uid-7982817-id-91999.html]Append用法总结 2008-11-14 11:42:19 分类: Syntax APP ...
- 目标跟踪之Lukas-Kanade光流法
转载自:http://blog.csdn.net/u014568921/article/details/46638557 光流是图像亮度的运动信息描述.光流法计算最初是由Horn和Schunck于19 ...
- 递归神经网络(RNN,Recurrent Neural Networks)和反向传播的指南 A guide to recurrent neural networks and backpropagation(转载)
摘要 这篇文章提供了一个关于递归神经网络中某些概念的指南.与前馈网络不同,RNN可能非常敏感,并且适合于过去的输入(be adapted to past inputs).反向传播学习(backprop ...
- JAVA基础总结一:
一.数据类型及变量名和注释 1. Java 中的数据类型分为两大类: 1) 原生数据类型 (Primitive Data Type) :8个(byte.char.short.int.long.floa ...
- jq中如何阻止元素的默认行为?
阻止网页元素的默认行为: event.preventDefault(); 或者:return false;
- 网站优化之-SEO在网页制作中的应用(信息来自慕课网课程笔记)
一.SEO基本介绍. 1.搜索引擎工作原理. 2.seo简介:SEarch Engine Optimization,搜索引擎优化.为了提升网页在搜索引擎自然搜索结果中的收录数量及排序位置而做的优化行为 ...