java - Hibernate ManyToMany 方法抛出 'org.hibernate.LazyInitializationException' 异常

标签 java spring spring-boot set spring-data

我在 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/

相关文章:

java - 并非始终使用所有属性的对象的最佳实践

java - Spring native 应用程序构建失败并出现构建回溯

java - JNDI 命名唯一性?

java - 如何使用 Project Reactor 设计/创建 react 方法

java - 在完全离线的环境下开发Spring Boot项目,可能吗?

java - 跨包继承

java - 如何使用java在tomcat webapps文件夹外读写图像

java - 如何处理 Spring/EJB/Mockito... 代理上的内部调用?

java - Autowiring 组件不直接引用

java - Android 中的向后兼容性和 SDK 更新