猿问
回到首页
个人中心
反馈问题
注册登录
下载APP
首页
课程
实战
体系课
手记
专栏
慕课教程
JPA和Hibernate中的N + 1问题有什么解决方案?
我知道N + 1问题是执行一个查询以获取N个记录,执行N个查询以获取一些关系记录。
但是如何在Hibernate中避免这种情况?
汪汪一只猫
浏览 1025
回答 3
3回答
DIEA
Hibernate中1 + N的本机解决方案称为:20.1.5。使用批量提取使用批量获取,如果访问了一个代理,Hibernate可以加载多个未初始化的代理。批量抓取是对惰性选择抓取策略的优化。我们可以通过两种方式配置批量获取:在1)类级别和2)集合级别...检查以下问答:@BatchSize但在@ManyToOne情况下很多往返避免n + 1渴望获取子集合元素关联有了注释,我们可以这样做:一个class级别:@Entity@BatchSize(size=25)@Table(...public class MyEntity implements java.io.Serializable {...一个collection级别:@OneToMany(fetch = FetchType.LAZY...)@BatchSize(size=25)public Set<MyEntity> getMyColl() 延迟加载和批量提取一起代表了优化,这是:它不要求任何明确的抓取我们查询将被应用到加载根实体后(懒惰地)触及的任何数量的引用(而显式访存仅影响查询中命名的那些)将解决问题1 + N的集合 (因为只能通过根查询获取一个集合),而无需进一步处理即可获得DISTINCT根值(请检查:Criteria.DISTINCT_ROOT_ENTITY与Projections.distinct)
0
0
0
打开App,查看更多内容
随时随地看视频
慕课网APP
相关分类
Java
继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续