我正在学习使用JPA,有一件事使我感到困惑。我正在尝试在已有的两个类之间实现多对多关系。我的数据库架构很简单。有一个表称为stations(PK:station_id),一个表称为buss(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)和一个所有者。区别在于所有者需要指定@JoinTable注释,而所有者需要指定mappedBy。我不明白的是mappedBy值需要设置为什么。

从我所查看的各种示例中收集到的信息来看,它必须是所有者类中字段的名称,因此在此示例中,由于Station包含buss字段,因此需要设置映射者至。

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

最佳答案

一些注意事项:


  映射注释中缺少mapledBy元素意味着
  关系的所有权,而所映射的存在
  元素表示实体在关系的反面。
  
  mappedBy的值是所属属性的名称
  指向反向实体的实体。


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

09-26 20:59