Получить внутренние объекты с неизвестной глубиной - PullRequest
1 голос
/ 21 мая 2019

У меня есть класс EntityA, который может содержать Set<EntityA>, и я не могу получить все объекты сразу, используя @NamedEntityGraph.Это неправильный дизайн, чтобы попытаться получить все объекты сразу?Если нет, возможно ли это сделать?Я хотел бы избежать использования EAGER fetch.Другим вариантом, о котором я думал, было использование Spring projection.

EDIT: я закончил так:

private void initializeEntitiesA(Set<EntityA> entities) {
    for (EntityA entity : entities) {
        Hibernate.initialize(entity);
        initializeEntitiesA(entity.getEntities());
    }
}

Это хорошо?Учитывая, что этот метод вызывается в конкретном случае, не каждый раз, когда вы хотите получить EntityA без его дочерних объектов в полном объеме.

1 Ответ

0 голосов
/ 21 мая 2019

Нет способа выполнить динамическое число объединений на стороне базы данных, поэтому нет способа фактически извлечь все объекты в одном совке.Самый быстрый общий способ сделать это - сделать один запрос на уровень, что JPA сделает для вас (не слишком быстро, но это не требует дополнительных затрат, если вы делаете это лениво).

Если вы зналиподробнее о конкретных данных (например, в 99,9999% случаев имеется ровно три уровня) вы можете выполнить микрооптимизацию, всегда начиная с тройного внешнего самосоединения - и здесь, на самом деле, никакая реализация JPA не поможет вам.

Как правило, я думаю, что ваш дизайн не имеет смысла.Если у вас много таких данных, рассмотрите базу данных графа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...