【发布时间】:2016-05-25 06:57:18
【问题描述】:
我有 3 个实体:PERSON、CAR 和 PROFFESION。
@Entity
@Table(name = "PERSON")
public class Person implements Serializable {
@Id
private Long id;
@OneToMany(mappedBy = "person", fetch = FetchType.EAGER)
private List<Car> cars;
@OneToMany(mappedBy = "person", fetch = FetchType.EAGER)
private List<Profession> professions;
}
@Entity
@Table(name = "PROFESSION")
public class Profession implements Serializable {
@Id
private Long id;
@ManyToOne
@JoinColumn(name = "PERSON_ID")
private Person person;
}
@Entity
@Table(name = "CAR")
public class Car implements Serializable {
@Id
private Long id;
@ManyToOne
@JoinColumn(name = "PERSON_ID")
private Person person;
}
当我试图检索与两个职业和一辆车有联系的人时,结果是两个职业和两辆重复的汽车。
或者如果他连接了五辆车和一个职业,结果是五辆车和五个重复职业。
我应该如何更正映射以便获得正确的结果?
【问题讨论】:
-
最简单的选项。移除 Eager fetch 或将 List 更改为 Set。
-
你如何检索
Person? -
谢谢,我用 Set 替换了 List 并且它起作用了。是的,我使用 JPA。
-
@VakoBeridze 有趣的是,使用
Hibernate(不使用JPA)你根本无法使用List获得Person,原因是MultipleBagFetchException:)跨度>
标签: java hibernate jpa hibernate-mapping hibernate-annotations