我有以下类,在注释@BatchSize注解时,它不工作,并且我得到了n+1 select查询。
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
class Order{
@ToString.Exclude
@ManyToOne
@JoinColumn(name = "item_fk")
Item item;
@ToString.Exclude
@ManyToOne
@JoinColumn(name = "shipment_fk")
Shipment shipment; }Item.class
class Item{
String id;
String name;
}在实现中,我得到n+1查询是什么错误?
发布于 2021-03-05 17:20:46
List<Orders>而不是Set<Orders>.请注意,在documentation中提到了
然而,尽管
@BatchSize比遇到N+1查询问题要好,但在大多数情况下,DTO投影或JOIN FETCH是一个更好的替代方案,因为它允许您通过一个查询获取所有需要的数据。
发布于 2021-03-05 21:47:04
您的N+1查询问题是由于您在Order中急切地获取Item。在那里更改为LAZY,您应该可以继续工作了。
https://stackoverflow.com/questions/66488943
复制相似问题