LazyInitializationException

LazyInitializationException

出于某些测试目的,我试图通过抛出LazyInitializationException进行JUnit测试。

我的情况是我有3个实体

@Entity(name = "Role")
public class Role {
    @LazyCollection(LazyCollectionOption.TRUE)
    @ManyToMany(mappedBy = "roles", fetch=FetchType.LAZY)
    private Set<AppUser> appUsers;
    ...

}

@Entity(name = "Group")
public class Group {
    @LazyCollection(LazyCollectionOption.TRUE)
    @ManyToMany(mappedBy = "groups", fetch=FetchType.LAZY)
    private Set<AppUser> appUsers;
    ...
}

@Entity(name = "AppUser")
public class AppUser {
    @LazyCollection(LazyCollectionOption.TRUE)
    @ManyToMany(fetch= FetchType.LAZY)
    @JoinTable(name = "APPUSER_ROLE", joinColumns = @JoinColumn(name = "USER_ID", referencedColumnName = "ID"), inverseJoinColumns = @JoinColumn(name = "ROLE_ID", referencedColumnName = "ID"))
    private Set<Role> roles;
    ...

    @LazyCollection(LazyCollectionOption.TRUE)
    @ManyToMany(fetch= FetchType.LAZY)
    @JoinTable(name = "APPUSER_GROUP", joinColumns = @JoinColumn(name = "USER_ID", referencedColumnName = "ID"), inverseJoinColumns = @JoinColumn(name = "GROUP_ID", referencedColumnName = "ID"))
    private Set<Group> groups;
    ...

}


我生成了一些测试数据,所有这3个数据都正确地保存在具有该关系的DB中。然后我提交交易。

但是,然后我尝试使用相同的测试方法读取Role(基于id),但同时我也读取了所有其他相关实体(似乎急于加载)。为什么会这样呢?我怎么来LazyInitializationException

编辑:好的,我对一般描述不感兴趣,而是需要一个代码示例,因为在我的情况下无法启动它。一般说明不能解决我的问题。

最佳答案

我如何才能进入LazyInitializationException?


当你有:


延迟加载的实体成员(例如OneToMany或ManyToMany)
没有有效的交易(实体已分离)
该成员尚未加载
您尝试访问实体成员,这将触发延迟加载,但由于实体已分离,因此这是不可能的

10-06 09:35