我在使用 JPA(Hibernate) 和 LazyFetching 时遇到了一些麻烦
我有一些实体:任务、奖励、合同
关系(都是懒惰的):
- Quest One2Many 奖励;Quest Many2Many 合约;
- 合约 One2Many 奖励;合同Many2Many任务;
- 奖励Many2One查询;奖励Many2One合约;
DB 包含这些数据:Quest1 有 Reward1、Reward2 和 Contract1、Contract2;
在某些情况下,我需要 Quest 及其奖励和合同,所以我在 JPArepository 中这样做:
@Query("select Q from Quest Q left join fetch Q.rewards left join fetch Q.contracts")
List<Quest> getAllQuestsWithRewardsAndContracts();
问题是我收到了
一个带有 4 个(但它只有 2 个)奖励(Reward1,Reward2,Reward1,Reward2)和两个合同的任务。
我得到重复的奖励!
我不明白为什么!
如果我这样做:
@Query("select distinct Q from Quest Q left join fetch Q.rewards")
List<Quest> getAllQuestsWithRewardsRew();
我收到一个任务有两个奖励(Reward1,Reward2)
为什么 ?为什么我有重复?