В настоящее время я пытаюсь найти эффективный способ извлечения сопоставленных сущностей @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, который подводит итог, если мы говорим о тысячах записей.
В моей текущей тестовой системе я получаю 3982 строкичто в общей сложности занимает 5323 мс.по сравнению с 338 мс, если я просто получаю E-сущности без выборки L-сущностей.
Есть ли эффективный способ загрузить всю информацию за один раз?Одна попытка, которую я попробовал, это следующий запрос:
@Query("select e, l from E e LEFT JOIN e.ls l where [...]")
, который возвращает List<Object[]>
. При использовании этого запроса количество строк будет увеличиваться, поскольку некоторые E могут дублироваться, если они содержат более 1 L.
Но, может быть, есть лучший способ, о котором я не знаю?