load()和get()的区别
2024-10-18 18:17:56
区别1:如果数据库中,没有userId的对象。如果通过get方法加载,则返回的是一个null;如果通过load加载,则返回一个代理对象,如果后面代码如果调用user对象的某个属性(比如user.getPassword())会抛出异常:org.hibernate.ObjectNotFoundException;
区别2:load支持延迟加载,get不支持延迟加载。
也就是说:
Java代码
Users user = (Users)session.load(Users.class, userId);
Users user = (Users)session.load(Users.class, userId);
这句代码不会去执行数据库查询,只有用到user时才会去执行数据库查询。
而:
Java代码
Users user = (Users)session.get(Users.class, userId);
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());
Users user = (Users)session.load(Users.class, userId);
System.out.println(user.getId());
上面这2句代码,不会去执行数据库操作。因为load后会在hibernate的一级缓存里存放一个map对象,该map的key就是userId的值,但是当你getId()时,它会去一级缓存里拿map的key值,而不去执行数据库查询。所以不会报任何错。不会执行任何数据库操作。
最新文章
- Entity Framework 6 Recipes 2nd Edition(12-3)译 ->; 数据库连接日志
- 【BZOJ-4569】萌萌哒 ST表 + 并查集
- SQL Server 创建表 添加主键 添加列常用SQL语句
- Java for Mac 问题
- canvas像素操作
- 【转】IOS中的release和nil
- ubuntu12.04 gdb安装使用
- Windows下使用批处理设置IP地址,DNS
- ScriptManager需要用到的JS
- 小议common lisp程序开发流程 - Ever 17 - 博客频道 - CSDN.NET
- hdu4578(线段树)
- mysql数据库参数innodb_buffer_pool_size和max_connections
- linux内核中的C语言常规算法(前提:你的编译器要支持typeof和type)
- Keep面经汇总
- Exp1 PC平台逆向破解 20165235 祁瑛
- python 之 列表与字典
- js +与?优先级
- HTTP协议整理
- djang-rest-framework学习-day1
- SharePoint JavaScript API in application pages
热门文章
- 清理IIS Express上的网站
- C#各种异常处理方式
- 使用Bootstrap 3开发响应式网站实践06,使用ListGroup、Thumbnails展示内容
- C# 输入法 z
- c# webBrowser下载图片
- Python3.6学习笔记(五)
- 【BZOJ】【3670】【NOI2014】动物园
- there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause
- Visual Studio 2013键盘码农常用快捷键
- 第十六章 springboot + OKhttp + String.format