[英]Efficient way to fetch @OneToMany from a list of entities
我目前正在嘗試找出一種從其他實體列表中獲取@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包含多個L時,它們可能會重復。
但是,也許還有我不知道的更好的方法?
首次嘗試時,您可以嘗試兩件事:
失敗的話,您可以自己查看填充列表:
in
你的數據庫的限制
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.