JPA ManyToMany映射了澄清

时间:2015-10-29 20:54:31

标签: java hibernate jpa

我正在学习使用JPA,有一件事让我困惑。我正在尝试实现我所拥有的两个类之间的多对多关系。我的数据库架构很简单。有一个名为站(PK:station_id)的表,一个名为 bus(PK:bus_id),另一个用于将它们连接在一起,称为 station_bus(FKs:station_id, bus_id)

相关代码:

// Station Class
@Entity
@Table(name = "stations")
public class Station {
    private List<Bus> buses;

    @ManyToMany(fetch = FetchType.LAZY)
    @JoinTable(
            name = "station_bus",
            joinColumns = {@JoinColumn(name = "bus_id")},
            inverseJoinColumns = {@JoinColumn(name = "station_id")}
    )
    public List<Bus> getBuses() { return buses; }
}

// Bus Class
@Entity
@Table(name = "buses")
public class Bus {
    private List<Station> stations;

    @ManyToMany(
            fetch = FetchType.LAZY,
            mappedBy = "buses"
    )
    public List<Station> getStations() { return stations; }
}

有一件事让我困惑。我知道,在多对多的关系中,一个人需要成为所有者,本案例中为Station,另一个是ownee。不同之处在于所有者需要指定@JoinTable注释以及需要指定mappedBy的ownee。我不明白的是需要设置mappedBy值。

从我从各种示例中收集的内容我看到它需要是所有者类中字段的名称,所以在这个例子中,因为Station包含一个bus字段,这就是需要映射的内容被设置为。

如果有人可以确认或纠正我,那将会有所帮助,因为我找不到答案。

1 个答案:

答案 0 :(得分:2)

一些注意事项:

  

映射注释中缺少mappedBy元素意味着   关系的所有权,而mappedBy的存在   element表示实体处于关系的反面。

     

mappedBy的值是拥有中属性的名称   指向反向实体的实体。

您对mappedBy的示例使用是正确的。