У меня есть отношение многие ко многим между таблицами фильмов и актеров
@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();
}