我有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;
}
当我试图找回一个与两个职业和一辆车有联系的人时,结果是两个职业和两个重复的汽车。
或者,如果他与五辆汽车和一个职业相关联,那么结果是五辆汽车和五个重复职业。
我应该如何更正映射,以便收到正确的结果?
答案 0 :(得分:2)
使用Set
映射oneToMany如果您不想要重复。它映射到映射表中的<set>
元素。所以首先你要对这些部分进行更改:
private Set<Car> car = new HashSet<Car>(0);
@OneToMany(fetch=FetchType.LAZY, mappedBy="persons")
public Set<Car> getCar() {
return this.car;
}
public void setCar(Set<Car> car) {
this.car = car;
}
对职业和另一个人做同样的事情你不想要重复。您可以根据加载首选项设置fetchType。 Eager
一次性加载,Lazy
按需加载,这通常是最好的。