Hibernate Mapping - 如何加入三个表

时间:2016-05-25 06:57:19

标签: java hibernate jpa hibernate-mapping hibernate-annotations

我有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;
    }

当我试图找回一个与两个职业和一辆车有联系的人时,结果是两个职业和两个重复的汽车。

或者,如果他与五辆汽车和一个职业相关联,那么结果是五辆汽车和五个重复职业。

我应该如何更正映射,以便收到正确的结果?

1 个答案:

答案 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按需加载,这通常是最好的。