У меня есть отношения ManyToMany в Hibernate
Проект.класс
@ManyToMany
@JoinTable(
name = "user_projects",
joinColumns = { @JoinColumn(name = "project_id")},
inverseJoinColumns = { @JoinColumn(name = "user_id")}
)
private Set<User> projectUsers = new HashSet<>();
Пользователь.класс
@ManyToMany(fetch = FetchType.EAGER,
mappedBy = "projectUsers",
cascade = CascadeType.ALL)
private Set<Project> userProjects = new HashSet<>();
И когда я получаю текущего пользователя через
@AuthenticationPrincipal User user
У меня метод вызвал исключение org.hibernate.LazyInitializationException, когда user.getUserProjects();




Попробуйте использовать @Transactional, возможно, это можно решить, потому что аннотация @Transactional в методе getFavorites() указывает, что сеанс будет закрыт в конце этого метода
Это связано с тем, что при использовании @ManyToMany сначала извлекаются все Project пользователей, затем все User выбранных Project и так далее... Эта циклическая зависимость вызывает ошибку, потому что на стороне Project отсутствует нетерпеливая выборка.
Решением будет использование:
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(
name = "user_projects",
joinColumns = { @JoinColumn(name = "project_id")},
inverseJoinColumns = { @JoinColumn(name = "user_id")}
)
private Set<User> projectUsers = new HashSet<>();
Хотя я не рекомендую это решение из-за проблем с производительностью (и возможных побочных эффектов). Лучшим решением было бы иметь сущность для таблицы соединений.
Добавление @ManyToMany(fetch = FetchType.EAGER) не работает для меня (можете ли вы привести пример с сущностью для таблицы соединений, пожалуйста