jpa2.2.10 JpaSpecificationExecutor Specification 查询时,实体类中存在@OneToMany,怎么才能查询的时候不查询该@OneToMany的关联表?
Posted on 2023-06-17 08:29 且行且思 阅读(134) 评论(0) 编辑 收藏 举报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设定有效
分类:
JAVA
, Hibernate(Jpa)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
2015-06-17 C#:比较二个字符串,查找出相同字数和差异字符
2011-06-17 Asp.Net : runat="server" 的form 提交到其他页面的方法
2009-06-17 C# 自动化模型编辑Word
2009-06-17 C# 读写Word :提示将 Word 用作自动化服务器时提示保存 Normal.dot (独占Normal.dot,没办法读写的解决方案)