JPA Hibernate, Ленивая загрузка после присоединения - PullRequest
0 голосов
/ 26 ноября 2018

Мне нужно получить сущность и ее коллекцию из контроллера Rest, но у меня очень странное поведение с пружинными данными JPA.

У меня есть отношение ManyToMany между объектами с отложенной загрузкой.

@Entity
class Folder{
    ...
    @ManyToMany(fetch = FetchType.LAZY)
    protected Set<Tag> tags;

    ...getter setter
}

@Entity class Tag{

    @ManyToMany(fetch = FetchType.LAZY, mappedBy = "tags"
    protected List<File> files; 
}

И запрос JPQL в весеннем репозитории jpa

@Query("SELECT f FROM Folder f INNER JOIN f.tags t WHERE
        f.id = :id")
Folder findFolderById(@Param("id") int id);

Итак, папкадолжен быть заполнен коллекцией тегов и избегать отложенной загрузки.

Но я вижу в журналах, что после присоединенного запроса в таблице тегов есть выборка, поэтому загрузка отложена.

Hibernate: выберите folder0_.id как id2_2 _... Hibernate: выберите tags0_.files_id ...

Я не хочу использовать тип выборки EAGER, потому что мне не всегда нужна коллекция Tag.Как я могу избежать этой Ленивой загрузки?

1 Ответ

0 голосов
/ 27 ноября 2018

Спасибо Алану Хей.Решение простое, нам просто нужно использовать ключевое слово Fetch.Для того, чтобы заполнить коллекцию.

@Query("SELECT f FROM Folder f LEFT JOIN FETCH f.tags t WHERE
        f.id = :id")
Folder findFolderById(@Param("id") int id);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...