Жадная загрузка сущностей

Добрый день, у меня в сущности (A) есть атрибут который загружает список связанной сущности (B). В связанной сущности тоже есть 2 атрибута, которые содержат в себе списки связанных сущностей (C)(D). У меня задача вывести поля и сущности (C) и (D) при открытия list-view сущности (A). Это получилось сделать с помощью такого кода в сущности (A):

@Composition
@OneToMany(mapped = “idB”, casace = CascadeType.ALL)
private List listB;

@Transient
@DependsOnProperties(“listB”)
@JmixPropoerty
private String attributeC

@Transient
@DependsOnProperties(“listB”)
@JmixPropoerty
private String attributeD

public String getAttributeC(){
List list = new ArrayList<>():
listB.forEach(b-> b.getListC.forEach(C->list.add(C.getAttribute) Такой же гет для атрибута D

Вопрос в том, что это вызывает 3 select запроса в бд, что не очень оптимально. Как возможно сделать жадную загрузку listB, чтоб сразу загрузить все дочерние сущности и сократить кол-во запросов в бд, до 1. Заранее спасибо

Пробовали грузить с fetchPlan в котором у списков стоит fetch = "JOIN"?

https://docs.jmix.ru/jmix/studio/fetch-plan-designer.html

Добрый вечер, да попробовал.
Наблюдаю, что при загрузки list происходит 1 select: “select e from A e”
Далее следует Fetch modes e.B=JOIN, C=JOIN, D=JOIN
Формируется большой select запрос составляющий компоненты всех 4 сущностей.
Следом идут 3 select запроса к сущностям B, C, D.

Получаем по итогу всё же несколько запросов

Мб вы в экране используете какие-то параметры, которые не включены в fetchPlan? Проверьте есть ли поля которые не грузятся в 1ом select и грузятся в других.

В DataGrid есть все поля сущности A кроме них ничего не добавляется. Включая добавленные поля из сущности C и D, которые описаны в сущности A. Пытаюсь понять корректно ли такое поведение в целом или нет, что нужны select для b,c,d когда ранее был сформирован один большой select запрос который уже включает атрибуты этих сущностей

Если вам нужно только отобразить эти данные в UI-таблице, скорее всего более эффективно и управляемо будет не включать транзиентные атрибуты в модель, а добавить колонки с рендерерами в саму UI-таблицу (см. 5. Работа с данными в пользовательском интерфейсе :: Документация Jmix), и грузить эти связанные данные запросом из экрана.

1 симпатия