我在 Hibernate 中有 ManyToMany 关系
项目.类
@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
当 user.getUserProjects(); 时,我有方法抛出“org.hibernate.LazyInitializationException”异常;
最佳答案
这是因为使用@ManyToMany
时,首先会获取user的所有Project
,然后再获取Project的所有
等等...这种循环依赖会导致错误,因为 User
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<>();
尽管由于性能问题(以及可能的副作用),我不推荐此解决方案。更好的解决方案是有一个用于连接表的实体。
关于java - Hibernate ManyToMany 方法抛出 'org.hibernate.LazyInitializationException' 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54873786/