LazyLoading с ManyToMany работал в EAGER - PullRequest
       12

LazyLoading с ManyToMany работал в EAGER

1 голос
/ 30 сентября 2019

У меня есть отношение многие ко многим между таблицами фильмов и актеров

@Table(...)
public class Film extends SuperId {
...
    @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    @JoinTable(name = "films_actors",
            joinColumns = @JoinColumn(name="film_id", referencedColumnName="id"),
            inverseJoinColumns = @JoinColumn(name="actor_id", referencedColumnName="id"))
    private Set<Actor> actors = new HashSet<>();
...
}

и сущностью актера

@Table
public class Actor extends SuperId {
...
    @ManyToMany(mappedBy = "actors", fetch = FetchType.LAZY)
    @JsonIgnore
    private Set<Film> films = new HashSet<>();
...
}

Но когда я пытаюсь получить все фильмы с помощью методов SpringData или методов, основанных настроитель Критерий, я получаю все фильмы с инициализированными всеми связанными актерами и другими ленивыми связанными сущностями

@PersistenceContext
private EntityManager em;

public List<Film> findAllLazy(Pageable pageable) {
    CriteriaBuilder cb = em.getCriteriaBuilder();
    CriteriaQuery<Film> query = cb.createQuery(Film.class);
    Root<Film> root = query.from(Film.class);
    query.select(root)
            .distinct(true)
            .orderBy(cb.asc(root.get(Film_.rating)));
    return em.createQuery(query)
            .setFirstResult((pageable.getPageNumber()) * pageable.getPageSize())
            .setMaxResults(pageable.getPageSize())
            .getResultList();
}

1 Ответ

0 голосов
/ 30 сентября 2019

Доступ к акторам, установленным в отладчике, приведет к загрузке отложенной загруженной коллекции.

Таким образом, отложенная загрузка работает, как и ожидалось.

...