Hibernate中Session.load/get方法均可以根据指定的实体类和id从数据库读取记录,并返回与之对应的实体对象。其区别在于:
1.get()方法直接返回实体类,load()方法可以返回实体的代理类实例。
2.hibernate load是采用延迟机制(当lazy属性为true时) 而get不采用延迟机制(get语句马上读库)
3.找不到符合条件的数据 get方法将返回null
load将会报出ObjectNotFoundExcepion
4.get支持多态查询,load只有在lazy=false的情况下才支持多态查询
所谓多态查询,就是可以明确区分加载的是什么类型的对象,load采用代理机制无法支持
延迟加载:Hibernate尽量延迟向数据库发送sql,它自己有一个缓冲区,先把sql放在里面,最后一起发送,减少网络开销和数据库开销。
load方法原理:
当对象.hbm.xml配置文件元素的lazy属性设置为true时,调用load()方法时则返回持久对象的代理类实例,此时的代理类实例是由运行时动态生成的类,该代理类实例包括原目标对象的所有属性和方法,该代理类实例的属性除了ID不为null外,所在属性为null值,查看日志并没有Hibernate SQL输出,说明没有执行查询操作,当代理类实例通过getXXX()方法获取属性值时,Hiberante才真正执行数据库查询操作。
注意:
01.StudentEh s=(StudentEh)session.load(StudentEh.class,10);
02.
03.System.out.println(s.getId());
这两条语句同样不会产生sql语句,因为session.load后会在hibernate的一级缓存里存放一个map对象,该map的key就是id的值,但是当你getId()时,它是从一级缓存里取map的key值,而不去执行数据库查询。
当对象.hbm.xml配置文件元素的lazy属性设置为false时,调用load()方法则是立即执行数据库并直接返回实体类,并不返回代理类。而调用get()方法时不管lazy为何值,都直接返回实体类。
get方法原理:
get方法,hibernate会确认一下该id对应的数据是否存在,首先在session缓存中查找,然后在二级缓存中查找,还没有就查数据库,数据库中没有就返回null。
get方法如果在session缓存中找到了该id对应的对象,如果刚好该对象前面是被代理过的,如被load方法使用过,或者被其他关联对象延迟加载过,那么返回的还是原先的代理对象,而不是实体类对象,如果该代理对象还没有加载实体数据(就是id以外的其他属性数据),那么它会查询二级缓存或者数据库来加载数据,但是返回的还是代理对象,只不过已经加载了实体数据。
总结描述:
如果使用load方法,hibernate认为该id对应的对象(数据库记录)在数据库中是一定存在的,所以它可以放心的使用代理来延迟加载该对象。在用到对象中的其他属性数据时才查询数据库,但是万一数据库中不存在该记录,那没办法,只能抛异常,所说的load方法抛异常是指在使用该对象的数据时,数据库中不存在该数据时抛异常,而不是在创建这个对象时。由于session中的缓存对于hibernate来说是个相当廉价的资源,所以在load时会先查一下session缓存看看该id对应的对象是否存在,不存在则创建代理。所以如果你知道该id在数据库中一定有对应记录存在就可以使用load方法来实现延迟加载。
而对于get方法,hibernate一定要获取到真实的数据,否则返回null。
自己在开发过程中遇到的问题:
我们用MyEclipse hibernate工具通过数据库生成的DAO类,它的findById方法是用的session.get()方法,这是即时获得pojo对象,如果是load方法,在执行完load后如果关闭了session,那在接下来用到这个pojo对象时就会报session已关闭的错误。
分享到:
相关推荐
三相异步电机矢量控制仿真模型。内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。
一次并发导致错误分析
025 - 快手直播词和控场话术
第4章 管理信息库2024v2
在本文中,我们将深入探讨如何使用PyTorch进行人脸表情识别。这个数据集包含28,000张训练图像和7,000张测试图像,专为Python开发人员设计,以研究和构建深度学习模型来理解人类的情绪。PyTorch是一个强大的深度学习框架,因其灵活性和易用性而被广泛采用,它提供了动态计算图的功能,便于构建和调试神经网络。 让我们了解人脸表情识别的基本概念。这是一个计算机视觉任务,旨在根据面部特征识别七种基本表情:高兴、悲伤、惊讶、恐惧、愤怒、厌恶和中立。这通常涉及到图像处理、特征提取和机器学习算法。 要开始使用这个数据集,你需要做以下步骤: 1. **数据预处理**:解压Datawhale_人脸情绪识别_数据集文件,然后对图像进行预处理。这可能包括调整大小、归一化像素值到0-1区间、以及数据增强,如随机翻转、裁剪或旋转,以增加模型的泛化能力。 2. **数据加载器**:使用PyTorch的`torch.utils.data.Dataset`和`DataLoader`类来创建自定义数据加载器。这将使你能批量加载数据,并在训练过程中高效地处理图像。 3. **模型构建**:选择一个适合任务的卷
070 - 直播核心细节话术
功能说明:可以管理首页、个人中心、用户管理、旅行社管理、产品分类管理、门店公告管理、行政中心管理、订单信息管理、合同信息管理、社区留言、系统管理等功能模块。环境说明:开发语言:Java框架:springboot,mybatisJDK版本:JDK1.8数据库:mysql 5.7数据库工具:Navicat11开发软件:eclipse/ideaMaven包:Maven3.6
系统管理员主要包括首页、个人中心、用户管理、校友信息管理、校友会信息管理、加入校友会管理、活动类型管理、校友活动管理、报名申请管理、岗位管理、招聘信息管理、项目管理、校园捐赠管理、我的捐赠管理、校友相亲管理、论坛中心、系统管理。 环境说明: 开发语言:java JDK版本:jdk1.8 框架:springboot 数据库:mysql 5.7/8 数据库工具:navicat 开发软件:eclipse/idea
АДЛИН - No Love(Instrumental).mp3
项目已获导师指导并通过的高分毕业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行!可以放心下载 技术组成 语言:java 开发环境:idea、微信开发者工具 数据库:MySql5.7以上 部署环境:maven 数据库工具:navicat
这个项目是基于 Python 编写的,使用决策树算法对鸢尾花数据集进行分类。决策树是一种常用的监督学习算法,适用于分类和回归问题。在这个项目中,我们主要关注鸢尾花分类任务。 项目介绍: 数据集: 项目使用经典的鸢尾花数据集(Iris dataset)。这个数据集包含了三个不同种类的鸢尾花(山鸢尾、变色鸢尾、维吉尼亚鸢尾)的样本数据,每个样本有四个特征(花瓣长度、花瓣宽度、花萼长度、花萼宽度)。 决策树算法: 决策树是一种树形结构,其中每个节点代表一个特征,每个分支代表一个特征取值,每个叶子节点代表一个类别。通过对数据集进行递归划分,决策树学习从输入特征到输出标签的映射。 数据预处理: 在项目中,首先对鸢尾花数据集进行加载和预处理,包括数据的划分成训练集和测试集。 模型训练: 使用训练集训练决策树模型,让模型从数据中学习特征和类别之间的关系。 模型评估: 使用测试集对训练好的决策树模型进行评估,衡量模型的分类性能。通常使用准确率、精确度、召回率等指标进行评估。 结果展示: 最后,项目展示了决策树模型对新样本进行分类的能力,通过可视化方式展示决策树的结构。 这个项目旨在演。内容来源于网络分
096 - 主播活跃直播间的台词
地表覆盖分布是气候变化研究、生态环境评估及地理国情监测等不可或缺的重要基础信息。近年来,随着卫星遥感和计算机存储与计算能力的不断增强,全球尺度中高分辨率地表覆盖产品的应用需求日益迫切。 作为全球首套2020年全球30米精细地表覆盖产品,该数据集及时反映了2020年全球陆地区域(除南极洲)在30米空间分辨率下的地表覆盖分布状况,为地表相关应用提供了最新的数据支撑,对于全球变化、可持续发展分析以及地理国情监测等具有重要意义。 经过多年研究,该团队突破了全球30米地表覆盖多时相自动化精细分类关键技术,并于2019年9月发布了精细分类体系的2015年全球30米地表覆盖精细分类产品。该团队在此基础上做了大量优化工作,例如结合定量遥感反演模型对分类体系做了进一步深化(林地二级类从区域尺度拓展为全球尺度),利用多源辅助数据集和专家先验知识集改善了原来存在的少量错分和漏分问题,针对原来存在的少许空间过渡不连续问题进行了针对性处理与优化。
项目均经过测试,可正常运行! 环境说明: 开发语言:java JDK版本:jdk1.8 框架:springboot 数据库:mysql 5.7/8 数据库工具:navicat 开发软件:eclipse/idea
**CCNA(思科认证网络助理工程师)是网络技术领域中的一个基础认证,它涵盖了网络基础知识、IP编址、路由与交换技术等多个方面。以下是对CCNA中文版PPT中可能涉及的知识点的详细说明:** ### 第1章 高级IP编址 #### 1.1 IPv4地址结构 - IPv4地址由32位二进制组成,通常分为四段,每段8位,用点分十进制表示。 - 子网掩码用于定义网络部分和主机部分,如255.255.255.0。 - IP地址的分类:A类、B类、C类、D类(多播)和E类(保留)。 #### 1.2 子网划分 - 子网划分用于优化IP地址的分配,通过借用主机位创建更多的子网。 - 子网计算涉及掩码位数选择,以及如何确定可用的主机数和子网数。 - CIDR(无类别域间路由)表示法用于更有效地管理IP地址空间。 #### 1.3 私有IP地址 - 为了节省公网IP地址,私有IP地址被用于内部网络,如10.0.0.0/8,172.16.0.0/12,192.168.0.0/16。 #### 1.4 广播地址 - 每个网络都有一个特定的广播地址,所有数据包都会发送到这个地址以达到同一网络内的所有设备。
内容概要:本文介绍了 ESC(Electronic Stability Control)电子稳定控制系统,这是一种用于提高汽车操控稳定性的技术,主要包括 ABS(防抱死刹车系统)、TCS(牵引力控制系统)和偏航控制。ESC 通过监测车辆动态,自动调整四个车轮的刹车,防止车轮打滑和车辆侧滑。文章还详细解释了 ESC 的电路配置,包括收发器、MCU、DC/DC 转换器、马达驱动电路和阀门驱动电路等关键组件的工作原理和所需电子零部件的特点。 适合人群:汽车行业从业者、汽车电子工程师及相关领域的研究者。 使用场景及目标:帮助读者了解 ESC 系统的基本原理和技术细节,适用于汽车安全技术研发、故障排除及系统维护等工作。 其他说明:文中还提到了未来 ESC 系统的发展趋势,包括提高刹车控制精度、小型化和冗余化、低损耗与耐热性,以及智能化和网联化等方面的内容。
三轴转台sw2016可编辑全套技术资料100%好用.zip
conda文件下载1111
内容概要:本文详细介绍了二叉树的深度概念及其两种常见的计算方法——递归方法和层序遍历方法。提供了Python、Java和C++的代码实现,并对不同方法的优缺点进行了对比分析,解释了它们适用于不同类型二叉树的情况。 适合人群:具有一定数据结构基础的学习者,特别是对二叉树有初步了解但需要深入掌握二叉树深度计算的读者。 使用场景及目标:通过理论结合代码实例的方式,帮助学习者深刻理解二叉树的性质,掌握二叉树深度的不同计算方式,能够在实际项目中灵活选用最适合的方法进行高效计算。 阅读建议:建议读者先熟悉二叉树的基本概念,再逐步深入学习递归和层序遍历的方法。在实践中运行并调试给出的代码例子,有助于更好地吸收文章内容。
009 - 成功暖场留人话术