[英]Method threw 'org.hibernate.LazyInitializationException' exception
[英]Hibernate ManyToMany Method threw 'org.hibernate.LazyInitializationException' exception
我在 Hibernate 中有 ManyToMany 关系
项目.class
@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(); 时,我有 Method 抛出 'org.hibernate.LazyInitializationException' 异常;
这是因为在使用@ManyToMany
,首先提取 user 的所有Project
,然后提取的Project
的所有User
等等......这种循环依赖导致错误,因为在Project
端缺少eager fetching。
解决方案是使用:
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(
name = "user_projects",
joinColumns = { @JoinColumn(name = "project_id")},
inverseJoinColumns = { @JoinColumn(name = "user_id")}
)
private Set<User> projectUsers = new HashSet<>();
虽然我不推荐这个解决方案,因为性能问题(和可能的副作用)。 更好的解决方案是为连接表创建一个实体。
尝试使用@Transactional也许可以解决它,因为getFavorites()方法上的@Transactional注解表明会话将在该方法结束时关闭
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.