博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
load & get 加载方式
阅读量:6262 次
发布时间:2019-06-22

本文共 811 字,大约阅读时间需要 2 分钟。

1、Hibernate中get和load有什么不同之处?

(1)Hibernate的get方法,会确认一下该id对应的数据是否存在,首先在session缓存中查找,然后在二级缓存中查找,还没有就查询数据库,数据库中没有就返回null。
(2)Hibernate的load方法加载实体对象的时候,根据映射文件上类级别的lazy属性的配置(默认为true):
①若为true,则首先在Session缓存中查找,看看该id对应的对象是否存在,不存在则使用延迟加载,返回实体的代理类对象(该代理类为实体类的子类,由CGLIB动态生成)。等到具体使用该对象(除获取OID以外)的时候,再查询二级缓存和数据库,若仍没发现符合条件的记录,则会抛出一个ObjectNotFoundException。 
②若为false,就跟Hibernate的get方法查找顺序一样,只是最终若没发现符合条件的记录,则会抛出一个ObjectNotFoundException,所说的load方法抛异常是指在使用该对象的数据时,数据库中不存在该数据时抛异常,而不是在创建这个对象时。

2、Hibernate中save、update和saveOrUpdate方法的不同之处?

(1)save:执行保存操作的,对一个新new出来的对象进行保存,数据库中没有这个对象。如果数据库中有,会报错说有重复的记录。

(2)update:如果是对一个已经存在的托管对象进行更新,要使用update()方法了,数据中有这个对象。
(3)saveOrUpdate:这个方法是更新或者插入,有主键就执行更新,如果没有主键就执行插入。是根据实体类对象的状态做的不同操作。
①实体类对象为临时态时做的添加save操作。
②实体类对象为游离态、持久态时做的修改update操作。

转载于:https://www.cnblogs.com/FoxLegend/p/6381916.html

你可能感兴趣的文章
Internationalization(i18n) support in SAP CRM,UI5 and Hybris
查看>>
Xcode Debug调试汇总
查看>>
设计模式:再严谨的单例也尽量不要使用
查看>>
TiDB at 丰巢:尝鲜分布式数据库
查看>>
三篇文章了解 TiDB 技术内幕 —— 谈调度
查看>>
Next.js踩坑入门系列(六) —— 再次重构目录
查看>>
1. Context - React跨组件访问数据的利器
查看>>
Git常用操作、提交到GitHub等
查看>>
Android基础 四大组件之广播(Broadcast)
查看>>
SQL优化器原理 - 查询优化器综述
查看>>
TODO list小工具,给自己一个交代
查看>>
iOS Notification 与多线程
查看>>
NLP系列学习:概率图模型简述
查看>>
数组分页,返回数据,你用过吗?
查看>>
JEESZ-kafka消息服务平台实现
查看>>
(四)构建dubbo分布式平台-maven代码结构
查看>>
解读Node核心模块Stream系列一(Writable和pipe)
查看>>
自我绘制三
查看>>
区块链开发、以太坊开发的技术资料资源汇总
查看>>
CSS 技巧篇(五):理解CSS优先度
查看>>