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()&nbsp;延迟加载和批量提取一起代表了优化,这是:它不要求任何明确的抓取我们查询将被应用到加载根实体后(懒惰地)触及的任何数量的引用(而显式访存仅影响查询中命名的那些)将解决问题1 + N的集合 (因为只能通过根查询获取一个集合),而无需进一步处理即可获得DISTINCT根值(请检查:Criteria.DISTINCT_ROOT_ENTITY与Projections.distinct)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java