我目前正在试图找出一种有效的方法,以便从其他实体列表中获取@OneToMany映射的实体。
让我们来看看细节:
我有E和L这两个类(注意:两者都具有JPA / Hibernate必需的注释等。我只是忽略了这些信息,因为它们对我的情况并不重要)
public class L {
public String name;
}
public class E {
@ManyToMany(cascade = { CascadeType.PERSIST, CascadeType.MERGE })
public List<L> ls = new LinkedList<>();
public String name;
[...]
}
对于导出,我想获取所有E对象及其相关信息,包括L的相应列表。通常,我会使用普通的查询来执行此操作,如下所示:
@Query("select e from E e where [...]")
结果将为List<E>
当我继续创建导出文件时,系统会为每个E获取L的列表,如果我们要谈论的条目数为1000,则该列表将汇总。
在我当前的测试系统中,我正在检索3982行,总共需要5323ms。 如果我只获取E实体而不获取L实体,则为338ms。
有没有一种有效的方式可以一次性加载所有信息?我尝试的一种尝试是以下查询:
@Query("select e, l from E e LEFT JOIN e.ls l where [...]")
返回List<Object[]>
使用此查询,行的数量将增加,因为某些E包含的行数大于1 L时可能会重复。
但是也许还有一种我不知道的更好的方法?
答案 0 :(得分:0)
首次尝试时,您可以尝试两件事:
无法看到自己填写列表的情况:
in
限制内的批量大小