いくつかのテスト目的で、JUnit テストで LazyInitializationException をスローしようとしています。
私の場合は、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
ますか?
編集: OK、一般的な説明には興味がありません。むしろ、私の場合は開始できないため、コードサンプルが必要です。一般的な説明では問題が解決しません。