首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >@Batchsize批注不适用于OneToMany

@Batchsize批注不适用于OneToMany
EN

Stack Overflow用户
提问于 2021-03-05 16:11:57
回答 2查看 126关注 0票数 1

我有以下类,在注释@BatchSize注解时,它不工作,并且我得到了n+1 select查询。

代码语言:javascript
复制
Class Shipment{
 @OneToMany(fetch = FetchType.LAZY, mappedBy = order.shipment, cascade = CascadeType.ALL, 
 orphanRemoval = true)
 @BatchSize(size=20)
 Set<Orders> orders = new Hashset(); <---- Batch size annotation not working 
 }

Order.class

代码语言:javascript
复制
class Order{
 @ToString.Exclude
 @ManyToOne
 @JoinColumn(name = "item_fk")
 Item item;

 @ToString.Exclude
 @ManyToOne
 @JoinColumn(name = "shipment_fk")
 Shipment shipment; }

Item.class

代码语言:javascript
复制
class Item{
 String id;
 String name;
}

在实现中,我得到n+1查询是什么错误?

EN

回答 2

Stack Overflow用户

发布于 2021-03-05 17:20:46

  1. 尝试使用List<Orders>而不是Set<Orders>.

请注意,在documentation中提到了

然而,尽管@BatchSize比遇到N+1查询问题要好,但在大多数情况下,DTO投影或JOIN FETCH是一个更好的替代方案,因为它允许您通过一个查询获取所有需要的数据。

票数 0
EN

Stack Overflow用户

发布于 2021-03-05 21:47:04

您的N+1查询问题是由于您在Order中急切地获取Item。在那里更改为LAZY,您应该可以继续工作了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66488943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档