Hibernate Метод ManyToMany вызвал исключение 'org.hibernate.LazyInitializationException' - PullRequest
0 голосов
/ 25 февраля 2019

У меня есть отношения ManyToMany в Hibernate

Project.class

@ManyToMany
@JoinTable(
        name = "user_projects",
        joinColumns = { @JoinColumn(name = "project_id")},
        inverseJoinColumns = { @JoinColumn(name = "user_id")}
)
private Set<User> projectUsers = new HashSet<>();

User.class

@ManyToMany(fetch = FetchType.EAGER, 
            mappedBy="projectUsers",
            cascade = CascadeType.ALL)
private Set<Project> userProjects = new HashSet<>();

И когда я получаю текущего пользователя через

@AuthenticationPrincipal User user

У меня есть метод, вызвавший исключение org.hibernate.LazyInitializationException, когда user.getUserProjects ();

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Это потому, что при использовании @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<>();

Хотя я не рекомендую это решение из-за проблем с производительностью (и возможных побочных эффектов).Лучшим решением было бы иметь сущность для таблицы соединений.

0 голосов
/ 25 февраля 2019

Попробуйте использовать @Transactional, возможно, можете решить эту проблему, потому что аннотация @Transactional в методе getFavor () указывает, что сеанс будет закрыт в конце этого метода

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