У меня есть класс User, содержащий коллекцию лениво загруженных объектов.
class User {
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@Getter
@Column(nullable = false)
private List<Wallet> wallets= new ArrayList<>();
}
Теперь у меня также есть класс Transaction, который содержит ссылку на кошелек пользователя.
class Transaction {
@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "senderWallet", referencedColumnName = "id")
private Wallet senderWallet;
}
Теперь я создал службу, которая должна извлекать транзакции для данного пользователя:
@Transactional
public List<Transaction> getTransactionsForUser(User user) {
List<Wallet> wallets = user.getWallets();
List<Transaction> transactions = new ArrayList<>();
for (Wallet wallet : wallets) {
transactions.addAll(transactionRepository.findBySenderWallet(wallet));
}
return transactions;
}
В контроллере я выбираю текущего зарегистрированного пользователя следующим образом:
User user = ((UserPrincipal) authentication.getPrincipal()).getUser();
После этого я звоню в службу:
List<Transaction> transactions = transactionService.getTransactionsForUser(user);
И это вызывает исключение LazyInitializationException.Какой обходной путь здесь?