【发布时间】:2022-01-15 10:09:42
【问题描述】:
我正在尝试通过这个项目https://github.com/Baeldung/spring-security-registration 使用继承。
这是我的用户:
@Data
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(discriminatorType = DiscriminatorType.STRING, name = "TYPE")
public abstract class User {
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "users_roles",joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id"),inverseJoinColumns = @JoinColumn(name = "role_id", referencedColumnName = "id"))
private Collection<Role> roles;
}
还有一些像 UserAdmin 这样的子类:
@Entity
@DiscriminatorValue("ADMIN")
public class UserAdmin extends User {}
那么我的角色类是这样的:
@Data
@Entity
public class Role {
@ManyToMany(mappedBy = "roles")
private Collection<User> users;
}
但是我在注册用户时遇到了这个错误:
o.h.LazyInitializationException:无法延迟初始化角色集合:com.baeldung.persistence.model.Role.users,无法初始化代理 - 没有会话
需要帮助的人。
【问题讨论】:
-
当你做多对多关系时,他们必须懒惰地评估,因为你不能同时添加 2 个循环数据。检查你的代码,看看你在哪里错过了这个要求