繁体   English   中英

Hibernate ManyToMany 方法抛出“org.hibernate.LazyInitializationException”异常

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM