【发布时间】:2017-10-11 23:42:39
【问题描述】:
我已经用@OneToMany 列表映射了一个 1:N 关系,但是当我访问该列表时,由于 OUTER JOIN 导致结果重复。 这是映射的样子:
@Entity
public class Programmer
@ElementCollection(fetch=FetchType.EAGER)
@CollectionTable(name="emails", joinColumns=@JoinColumn(name="id", nullable=false))
@Column(name="email", nullable=false)
protected Set<String> emails = new HashSet<String>();
@OneToMany(mappedBy="programmer", fetch=FetchType.EAGER)
private List <Game> games = new ArrayList<Game>();
当我使用 prog.getGames() 获取属性时,结果重复了,因为 Hibernate SQL 进行了 OUTER JOIN:
from programmer
left outer join emails on programmer.id=emails.id
left outer join game on programmer.id=game.id
where programmer.id=?
如果不将 List 转换为 Set,有什么解决方案吗?我需要使用 prog.getGames() 获取游戏,不能使用自定义 HQL 或 Criteria。
【问题讨论】:
-
我需要通过使用 Programmer.getGames() 获取游戏的 JUnit 测试,没有 Criteria 怎么办?
-
@WEI_DBA 不认为这是重复的 - 根据他的问题,OP 正在寻找答案而不使用标准。
-
我对 Hibernate/JPA 不太熟悉,但为什么不能使用 Set 呢?那将是我天真的解决方案,不知道在 Hibernate 中执行此操作的“理想”方式。
标签: java sql hibernate duplicates