首页 > 解决方案 > 如何使用 EntityGraph 获取多个列表

问题描述

我花了太多时间尝试做一些乍一看似乎很简单的事情:

假设我有一个具有两个关系的Store实体:@OneToMany

@Entity
public class Store {

    private String name;

    @OneToMany(mappedBy = "store")
    private List<Foo> foos;

    @OneToMany(mappedBy = "store")
    private List<Bar> bars;

}

我想用相同的查询获取两个列表。我想使用实体图,因为我需要在执行时间决定我想要获取哪些孩子。

@EntityGraph(attributePaths = {"foos", "bars"})
Store findByName(String name);

这引起:

MultipleBagFetchException: cannot simultaneously fetch multiple bags.

我不想使用Setinstead of List,因为这种方法的目的是避免 N+1 查询问题笛卡尔积问题(实体层次结构比示例大得多),所以 nolazy fetching或更改ListSetdo 帮助这个案例。

此外,此处提出的第一个答案不适用于实体图。

有任何想法吗?

标签: javaspring-boothibernatejpaspring-data

解决方案


推荐阅读