【发布时间】:2012-12-27 14:43:16
【问题描述】:
我在使用 JPA(Hibernate) 和 LazyFetching 时遇到了一些问题
我有一些实体: 任务、奖励、契约
关系(都是懒惰的):
- 任务 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();
我收到一个任务有两个奖励(奖励1,奖励2)
为什么?为什么我有重复?
【问题讨论】:
标签: hibernate jpa fetch lazy-evaluation