Hibernate 映射 - 如何连接三个表

Hibernate Mapping - How to Join Three Tables

我有 3 个实体:人、车和专业。

    @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;
    }

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

或者他连接了五辆车和一个职业,结果是五辆车和五个重复的职业。

我应该如何更正映射才能收到正确的结果?

使用 Set 映射 oneToMany 如果您不想重复。它与映射 table 中的 <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;
    }

对 profession 和另一个 oneToMany 做同样的事情,你不想重复。您可以根据加载首选项设置 fetchType。 Eager 一次加载,Lazy 按需加载,这通常是最好的。