hibernate延迟加载(懒加载)详解

Flink项目基础配置指南 在大数据处理领域,Apache Flink凭借强大的实时流处理和批处理能力,成为众多开发者的首选工具。在日常工作中,开发Flink Jar任务是常见需求,但每次都需重复配置日志、梳理pom依赖、设置打包插件等,流程繁琐且易出错。为提升开发效率,减少重复劳动,将这些基础配置进行整理归纳十分必要。本文将围绕Flink项目的本地日志配置、pom依赖及插件配置展开详细介绍,为开发者提供一套可直接复用的基础配置方案,助力Flink项目高效开发。在Flink项目中,日志是了解任务运行状态、排查问题的重要依据。本地日志配 阅读详情

延迟加载

一.什么是懒加载?他的作用?

延迟加载,也叫懒加载,它是Hibernate为提高程序执行效率而提供的一种机制,即只有真正使用该对象的数据时才会创建。

Hibernate中主要是通过代理(proxy)机制来实现延迟加载。它的具体过程:Hibernate丛数据库获取某一个对象数据时、获取某一个对象的集合属性值时,或获取某一个对象所关联的另一个对象时,由于没有使用该对象的数据,hibernate并不是数据库加载真正的数据,而只是为该对象创建一个代理对象来代表这个对象,这个对象上的所有属性都是默认值;只有在真正需要使用该对象的数据时才创建这个真实对象,真正从数据库中加载它的数据,这样在某些情况下,就可以提高查询效率。

有如下程序代码:

User user=(User)session.load(clazz, id);//直接返回的是代理对象

System.out.println(user.getId());//没有发送sql语句到数据库加载

user.getName();//创建真实的User实例,并发送sql语句到数据库中

注意:1.不能判断User=null;代理对象不可能为空

代理对象的限制:和代理关联的session对象,如果session关闭后访问代理则抛异常。session关闭之前访问数据库

2.getId()方法不行因为参数为ID,getClass()方法不用访问数据库就可以得到的数据

Hibernate中默认采用延迟加载的情况主要有以下几种

1,当调用session上的load()加载一个实体时,会采用延迟加载。

2,当session加载某个实体时,会对这个实体中的集合属性值采用延迟加载

3当session加载某个实体时,会对这个实体所有单端关联的另一个实体对象采用延迟加载。

二.关闭延迟加载

       延迟加载确实会给程序的查询效率带来好处,但有时明确知道数据需要立即加载,如果Hibernate先默认使用延迟加载,而后又必须去数据库加载,反而会降低效率

1.     加载单个实体,如果不需要延迟加载,就可以使用session的get()方法。

2.     当session加载某个实体时,不需要对这个实体中的集合属性值延迟加载,而是要立即加载。这是可以在映射文件中这个集合的配置元素(set bag list)添加属性lazy=false;

3.     当session加载某个实体时,不需要对这个实体所单端关联的另一个实体对象延迟加载,就可以在影射文件中针对这个单端关联的配置元素(<one-to-one><many-to-one>)添加lazy=false;

三.抓取策略

   通过asm和cglib二个包实现;Domain是非final的。

1.session.load懒加载。

2.one-to-one(元素)懒加载:

       必需同时满足下面三个条件时才能实现懒加载

       (主表不能有constrained=true,所以主表没有懒加载)

       lazy!=false 2)constrained=true3)fetch=select

3.one-to-many (元素)懒加载:1)lazy!=false 2)fetch=select

4.many-to-one (元素) :1)lazy!=false 2)fetch=select

5.many-to-many (元素) :1)lazy!=false 2)fetch=select

6.能够懒加载的对象都是被改写过的代理对象,当相关联的session没有关闭时,访问这些懒加载对象(代理对象)的属性(getId和getClass除外)hibernate会初始化这些代理,或用Hibernate.initialize(proxy)来初始化代理对象;当相关联的session关闭后,再访问懒加载的对象将出现异常。

 

Xilinx GTY Transceiver时钟方案与功耗优化实践 本文详细解析了Xilinx GTY Transceiver的时钟方案设计与功耗优化实践,涵盖从基础配置到高速24.33024Gbps和中速10.1376Gbps的实战案例。通过Transceivers Wizard的IP设计技巧和动态功耗优化方法,帮助工程师有效降低FPGA系统功耗,提升高速串行通信的稳定性与效率。 阅读详情

相关推荐

从零开始跑通3DGS教程:()3DGS训练

本文介绍了在Docker环境中训练3DGS(3D Gaussian Splatting)的方法,属于《从零开始跑通3DGS教程》系列文章的第五部分。主要内容包括:Docker环境准备(基于pytorch/pytorch:1.13.1-cuda11.6-cudnn8-runtime镜像)、容器内conda环境配置(安装必要依赖和3DGS相关组件)、以及训练命令执行步骤。文章提供了详细的命令行操作流程,帮助读者快速搭建3DGS训练环境。适合在Linux系统、Nvidia GPU环境下使用,完整教程可参考系列文章

诺有缸的高飞鸟的博客 1641

Hibernate 5.0以后的懒加载实现及懒加载失效问题解决

目前工作中有个需求,需要对单张表的某个字段使用大字段(长字符串)来存储数据。使用oracle存储,即该字段会使用CLOB来存储长字符内容。那么该字段通过jpa进行实体设计如图所示:其中@Basic指定为懒加载模式,这里对大字段使用懒加载模式是比较合适的,例如在列表查询时往往是不用直接展示该字段内容的,一般只有在修改或查看详情时才会进行该字段的展示,我本次的工作需求即是如此,故采用懒加载

天下唯一的利哥哥的博客 1259

CDDT CST CDDT CSTTT

This is the second part of the SA8653 automotive CDDT configuration guide. It describes the matching rules and modification methods between CDDT and device‑tree DDTS. It explains CDT’s underlying logic and configuration in TZ, QNX and Android. It details C

qq_39257814的博客 1391

Hibernate懒加载问题

Hibernate懒加载获取到的是代理对象,只包含id。只要在实际使用时才会触发真正的数据库操作。

xiaoyi52的专栏 403

hibernate懒加载

懒加载  懒加载(Load On Demand)是一种独特而又强大的数据获取方法,是指程序推迟访问数据库,这样做可以保证有时候不必要的访问数据库,因为访问一次数据库是比较耗时的。 当我们查询一个对象的时候,在默认情况下,返回的只是该对象的普通属性,当用户去使用对象属性时,才会向数据库发出再一次的查询,这种现象我们称为lazy现象。 二 懒加载几种情况 首先我们要明确一点 Dom

实践求真知 377

Hibernate 基本操作、懒加载以及缓存

上一篇咱们介绍了 Hibernate 以及写了一个 Hibernate 的工具类,快速入门体验了一波 Hibernate 的使用,我们只需通过 Session 对象就能实现数据库的操作了。现在,这篇介绍使用 Hibernate 进行基本的 CRUD、懒加载以及缓存的知识。本篇文章主要讲了基本的 CRUD 操作,都是通过 Session 去操作的,根据一个持久化类的类型以及一个唯一标识进行相关操作,然后讲了 Hibernate 中的对象的状态,有 4 种,分别是瞬时、持久、游离、删除。

Gefangenes的博客 398

什么是Hibernate懒加载和立即加载?它们之间有什么区别?

但是,如果在使用懒加载的对象后关闭了Session,那么在访问其关联对象的属性时,就会抛出LazyInitializationException异常,因为Hibernate需要在Session的作用范围内才能发出SQL语句加载数据。HQL是Hibernate特有的查询语言,它类似于SQL,但它是面向对象的查询语言,可以直接使用类名和属性名来编写查询语句,无需关心具体的数据库表和字段。加载时机:懒加载是在真正需要访问关联对象的属性时才加载数据,而立即加载是在加载对象时立即加载关联对象的数据。

Aaron的博客 551

Hibernate的性能优化——延迟加载懒加载

Hibernate的性能优化——延迟加载懒加载) 通过asm和cglib两个包实现 1、  session.load()时,系统并没有直接去访问数据库,而是通过new来创建代理对象(代理对象不会为空,不能判定)。 代理对象限制:和代理关联的session关闭之前才能使用 User.getname()user.getBirthday()和初始化的方式Hibernate.initializ

尉微的博客专栏 3195

解决hibernate中的懒加载(延迟加载)问题

解决hibernate中的懒加载(延迟加载)问题

Littleree的博客 141

Hibernate延迟加载(懒加载)简介1

什么是延迟加载: 在使用某些Hibernate方法查询数据时,Hibernate返回的只是一个空对象(除id外属性都为null),并没有真正查询数据库。而在使用这个对象时才会触发查询数据库,并将查询到的数据注入到这个空对象中。这种将查询时机推迟到对象访问时的机制称之为延迟加载。 为什么要使用延迟加载: 可以提升内存资源的使用率 可以降低对数据库的访问次数 采用延迟加载的方法: session.loa

行者常至 645

hibernate懒加载延迟加载)问题

hibernate懒加载延迟加载)问题 我们在开发的时候经常会遇到延迟加载的问题,在实体映射中多对一和多对多中,多的一方的属性默认是lazy=”true”(即,默认是延迟加载)。 如: 延迟记载表现在:如,我们要查询id为2的部门数据,但是有许多用户数据的部门外键是id为2,我们在查询的时候,由于默认lazy=”true”(懒加载),所以是不会查询部门外键为2

学亮编程手记 743

Hibernate性能优化 --- 延迟加载(懒加载)

Hibernate性能优化 --- 延迟加载(懒加载) 一  延迟加载概述     Hibernate中主要是通过代理机制来实现延迟加载的。 目的:为了减少和数据库交互的次数,推迟和数据库交互的时间 过程:Hibernate数据库获取某一个对象时,获取某一个对象的集合属性值时,或获取某一个对象所关联的另一个对象时,由于没有使用该对象的数据,Hibernate并不从数据库加载真正的数据,而

韩晓爽的专栏 1017

Hibernate 懒加载是什么和急加载的区别

Hibernate 懒加载是什么和急加载的区别

weixin_45428910的博客 509

Hibernate懒加载详解

hibernate懒加载是利用动态代理来实现的;我们知道动态代理有JDK的动态代理(JDK动态代理所代理的对象必须要实现一个接口)和CGLIB的动态代理,Hibernate懒加载采用的是CGLIB的动态代理,CGLIB的动态代理可以生成目标类的子类,这也就是为什么创建对象关系映射的时候要求实体类不能够为final类型的原因了。

Speed_Pig的博客 786

Hibernate之lazy延迟加载

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34138139的博客 252

Hibernate 延迟加载剖析与代理模式应用

【转载按】 一篇对HIBERNATE延迟加载的内部机制分析得比较清晰的文章。 【原文】 http://www.ibm.com/developerworks/cn/java/j-lo-hibernatelazy/ Hibernae 的延迟加载是一个非常常用的技术,实体的集合属性默认会被延迟加载,实体所关联的实体默认也会被延迟加载Hibernate 通过这种延迟加

技术拾遗 631

解决Hibernate懒加载的4种方式

本文总结了我在学习hibernate的过程中,解决hibernate懒加载问题的四种方式。 懒加载简述:当我们查询一个对象的时候,在默认情况下,返回的只是该对象的代理对象,当用户去使用该对象的属性时,才会向数据库再一次发出查询语句。 例如,有一个对象是Employee,还有一个对象是Department。显然,对于Employee相对Department来说,是多对一的关系;而对于Depart

Huhui's Blog 1万+

采用6步换向的PMSM电机驱动设计,包含MATLAB模拟与再生制动功能.rar

1.版本:matlab2014/2019a/2024a2.附赠案例数据可直接运行。3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

最新版WiFi大师专业版小程序带流量主独立版4.0.5【源码 + 搭建教程】.zip

WiFi大师是一款专为商家店内用户设计的WiFi连接小程序。它的出现有效解决了商家在为客户提供WiFi服务的过程中遇到的各种问题,为消费者提供了更加高效快捷的上网方式。除此之外,WiFi大师小程序还为商家提供了一些额外的功能,例如店铺优惠券发放和周边热门店铺展示等。这些功能为商家提供了更多的机会,吸引消费者进行二次消费,同时也可以帮助商家进行周边商圈的流量导入变现。总而言之,WiFi大师小程序不仅是一款能够满足消费者WiFi需求的工具,同时还是商家进行营销和推广的利器。它的出现为商家提供了更加全面和有效的服务和支持,有助于提高商家的客户留存率和商业价值。众人拾柴火焰高,如果需要快速赚钱的不想投资的,可以直接搜索 乐无忧wifi 小程序看案例,免费加入拓展员 即可赚钱只要合作之后,你推广的每个商家的客户通过你的二维码 扫码连接wifi的 你都有收益。 有市场的话。一天推个几十家没问题。因为咱们这个是给商家带来好处的。并不是促销产品的。※最后一张图是赠送的一个分享赚钱的软件。扫码下载转发有人看了文章就可以赚钱源码说明最新独立版WIFI分销大师V4.0.5小程序源码,一款专业WiFi分销小程序源码,该小程序源码具有完整的后端,可直接上线使用,是一款非常实用的分销小程序。独立可学习版,花大价钱买来的分享给大家产品亮点一键扫码连接安全便捷客户信息留存高效便捷商圈流量导入流量变现店铺品牌曝光免费营销系统特色提前预制WiFi空码便于后期代理推广三级分销安全合法收益比例自由设定支持个人/个体企业等资质运营TP框架独立开发无需任何第三方框架收益来源(1)卖系统我们所开发的系统采用的是Saas架构,意味着只需要部署一次系统,就可以无限开通子账户。每个子账户对应一个独立的系统,数据是完全独立的。也就是说,每个子账户都可以

上一篇: 继承关系映射详解
下一篇: java web面试题
日依
博客等级 码龄15年 165粉丝 165原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值