多対多の関係を持つ2つのエンティティがあります。ManyToManyでFetchType.LAZYを使用するには?
クラスの役割で:
@ManyToMany(mappedBy = "roles")
private Set<User> users = new HashSet<>();
とクラスのユーザーで:
@ManyToMany
@JoinTable(name = "role_user", joinColumns = @JoinColumn(name = "user_id"),
inverseJoinColumns = @JoinColumn(name = "role_id"))
private Set<Role> roles = new HashSet<>();
そして、私は例外を取得:
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: User.roles, could not initialize proxy - no Session
私はfetch = FetchType.EAGER
を追加すると、私は別の例外を取得します:
java.lang.StackOverflowError: null
とロールとユーザーの間のサイクル。
この問題を解決するにはどうすればよいですか? Stackoverflowについても同様の質問がありましたが、私にとって本当の解決策は見つかりませんでした。
UPD:例外がスローされます :
@Service
public class UserAuthenticationProvider implements AuthenticationProvider {
...
@Override
@Transactional
public Authentication authenticate(final Authentication authentication) {
final String login = authentication.getName();
final String password = authentication.getCredentials().toString();
final User user = userRepository.findByLogin(login);
if (user != null && passwordEncoder.matches(password, user.getPassword())) {
return new UsernamePasswordAuthenticationToken(login, password,
user.getRoles()); // problem here
} else {
return null;
}
}
...
あなたが提示した宣言に問題があるとは確信していません。あなたが報告した例外の1つまたは両方を再現できる[mcve]を提示してください。 –