首页 > 其他分享 >懒加载与急加载FetchType.LAZY&FetchType.EAGER的区别和使用?

懒加载与急加载FetchType.LAZY&FetchType.EAGER的区别和使用?

时间:2023-06-17 18:33:19浏览次数:50  
标签:LAZY FetchType 关联 EAGER 加载 属性

1、FetchType.LAZY:懒加载,加载一个实体时,定义懒加载的属性不会马上从数据库中加载。 2、FetchType.EAGER:急加载,加载一个实体时,定义急加载的属性会立即从数据库中加载。 3、比方User类有两个属性,name跟address,登录后用户名是需要显示出来的,此属性用到的几率极大,要马上到数据库查,用急加载;而用户地址大多数情况下不需要显示出来,只有在查看用户资料是才需要显示,需要用了才查数据库,用懒加载就好了。所以,并不是一登录就把用户的所有资料都加载到对象中,于是有了这两种加载模式。  

    @OneToMany(targetEntity = DcyRightImage.class,cascade = {CascadeType.ALL},fetch = FetchType.LAZY)
    @JoinColumn(name = "geo_id", referencedColumnName = "id")
    private Set<DcyRightImage> images;

    @OneToMany(targetEntity = DcyRightVideo.class,cascade = {CascadeType.ALL},fetch = FetchType.EAGER)
    @JoinColumn(name = "geo_id", referencedColumnName = "id")
    private Set<DcyRightVideo> videos;

 

fetch策略

@OneToMany(mappedBy="image",cascade=CascadeType.ALL,fetch=FetchType.EAGER)
@Fetch(value=FetchMode.SUBSELECT)

两者比较:
两者都是设定关联对象的加载策略。前者是JPA标准的通用加载策略注解属性,
后者是Hibernate自有加载策略注解属性。

FetchType可选值意义与区别如下:
FetchType.LAZY: 懒加载,在访问关联对象的时候加载(即从数据库读入内存)
FetchType.EAGER:立刻加载,在查询主对象的时候同时加载关联对象。


FetchMode可选值意义与区别如下:
@Fetch(FetchMode.JOIN): 始终立刻加载,使用外连(outer join)查询的同时加载关联对象,忽略FetchType.LAZY设定。
@Fetch(FetchMode.SELECT) :默认懒加载(除非设定关联属性lazy=false),当访问每一个关联对象时加载该对象,会累计产生N+1条sql语句
@Fetch(FetchMode.SUBSELECT)  默认懒加载(除非设定关联属性lazy=false),在访问第一个关联对象时加载所有的关联对象。会累计产生两条sql语句。且FetchType设定有效



标签:LAZY,FetchType,关联,EAGER,加载,属性
From: https://www.cnblogs.com/Fooo/p/17488049.html

相关文章

  • TensorFlow04-数据集加载
    1数据集加载1.karas.datasets(数据加载)2.tf.data.Dataset.from_tensor_slices(加载成tensor)shufflemapbatchrepeat2tf.keras.datasets()boston_housing:波斯顿房屋价格回归数据集cifar10:CIFAR10小图像分类数据集cifar100:CIFAR100小图像分类数据集fashion_mnist:Fas......
  • 白名单rundll32加载shellcode上线metasploit(nim学习系列)
    白名单rundll32加载shellcode上线metasploit监听metasploitmsfconsole-x"useexploits/multi/handler;setlhost192.168.0.101;setlport443;setpayloadwindows/x64/meterpreter/reverse_tcp;exploit"生成shellcodemsfvenom-pwindows/x64/meterpreter/r......
  • Java类加载原理中为何要设计双亲委派机制
    首先,给大家演示两个示例代码,我们自定义一个与Java核心类库中java.lang.String类名相同的代码:packagejava.lang;/***自定义java.lang.String类**@author编程老司机*@date2023-06-16*/publicclassString{static{System.out.println("加载自......
  • vue图片懒加载vue-lazyload
    1.安装vue-lazyloadnpmivue-lazyload2.在main.js中引入使用import{createApp}from'vue'import'./style.css'importAppfrom'./App.vue'importVueLazyloadfrom'vue-lazyload'//引入importImgFailfrom"@/assets/......
  • web.xml加载详解
    一 1、启动一个WEB项目的时候,WEB容器会去读取它的配置文件web.xml,读取<listener>和<context-param>两个结点。2、紧急着,容器创建一个ServletContext(servlet上下文),这个web项目的所有部分都将共享这个上下文。 3、容器将<context-param>转换为键值对,并交给servletContext。 4......
  • uniapp上拉加载下拉刷新
    <template> <viewclass="content"> <scroll-viewscroll-with-animationrefresher-default-style="none":refresher-enabled="true" :refresher-triggered="triggered"refresher-background="#fff&quo......
  • 浅谈 thinkphp composer 扩展包加载原理
    浅谈thinkphpcomposer扩展包加载原理本文将介绍ThinkPHP中Composer扩展包的加载原理,帮助读者更好地理解和应用该功能。前言如题,今天感觉好久没有更新博客了。最近迷上了物联网开发。一直在研究stm32、51这些东西。想起来前几天群里面有人问到tp扩展包原理。其实这个前......
  • pytorch 加载(.pth)格式的模型
    有一些非常流行的网络如resnet、squeezenet、densenet等在pytorch里面都有,包括网络结构和训练好的模型。pytorch自带模型网址:https://pytorch-cn.readthedocs.io/zh/latest/torchvision/torchvision-models/按官网加载预训练好的模型:importtorchvision.modelsasmodels#pretr......
  • vue3 css ts 双重弹跳加载动画
    /双重弹跳加载动画*/效果如同页面https://codepen.io/yjx123/pen/zYMvbML<ahref="javascript:void(0)"@click="startLoading"><inline-svg:src="getAssetPath(iconPath)"></inline-svg><div:style="{......
  • myeclipse 不能正常加载项目
    问题不能加载项目,在选择项目后,DeployLocation是空的。 解决 1、网上查询后,提示,右键项目→ properties  →MyEclipse  →ProjectFacets  →web。修改項目名字。 2、但是在操作时,发现提示  thecurrentlydisplayedpagecontainsinvalidvalues。 ......