我正在学习使用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的示例用法是正确的。