Как получить ленивые атрибуты в коллекции сущностей, не делая N обращений к базе данных - PullRequest
0 голосов
/ 07 октября 2019

Как получить ленивые атрибуты в коллекции сущностей, не делая N обращений к базе данных. Пример:

transactions = getTransactionsBySomeCriteriaApiQuery(..); // n transactions
// this make 3*n calls to DB, I want to do only a few calls
transactions.forEach(res -> {
  res.getLazyCollection1().size();
  res.getLazyCollection2().size();
  res.getLazyCollection3().size();
});
return transactions;

Предположим, что n - это большое число. Я хотел бы знать, возможно ли получить эти ленивые данные, не делая огромное количество обращений к БД. Я использую JPA (eclipselink), реляционную базу данных.

EDIT : Действительно, это проблема выбора N + 1, и я хотел бы знать, как ее можно решить в eclipselink. Обратите внимание, что я не хочу менять отображения сущностей с ленивых на активные, потому что это необходимо в других местах. Я пытался использовать выборочные объединения (выборка по критериям API), но это не работает, когда используется более одного.

1 Ответ

0 голосов
/ 07 октября 2019

Используйте FETCH JOIN для получения фактически необходимых данных в начальном запросе.

...