【发布时间】:2019-06-16 20:59:08
【问题描述】:
我有一个包含延迟加载对象集合的用户类。
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。这里有什么解决方法?
【问题讨论】:
标签: java spring hibernate spring-boot jpa