MappedBy 在管理 Java Persistence API (JPA) 和 Hibernate 中对象关系映射的双向关系方面发挥着至关重要的作用。这是在数据库上下文中建模和导航复杂关系的一种实用方法。
在您的具体示例中,航空公司拥有许多 AirlineFlight,并且许多 AirlineFlight 属于一家航空公司、mappedBy用于避免重复信息存储。由于您希望AirlineFlights成为拥有的类,因此您在Airline类中指定mappedBy属性:
<code class="java">@OneToMany(fetch=FetchType.LAZY, cascade = {CascadeType.ALL}) @JoinColumn(name="IDAIRLINE") public Set<AirlineFlight> getAirlineFlights() { return airlineFlights; }</code>
@OneToMany注释中的mappedBy参数指定AirlineFlights表中的IDAIRLINE列是外键映射回航空公司表中的主键。这样,当您查询 Airline 对象时,您还可以轻松获取其关联的 AirlineFlights。
MappedBy 有几个重要用途:
在您的示例中,AirplaneFlights 表将 IDAIRLINE 列作为指向 Airline 表的外键,但 Airline 表没有相应的 IDAIRLINEFLIGHTS 列。此设置表明 AirlineFlights 是拥有实体,即使您的要求是让 Airline 作为所有者。
要解决此问题,您需要相应地调整注释。 AirlinesFlights 上的 @OneToMany 注释应移至 AirlineFlight 类,并且mappedBy 属性应引用 Airline 类中的“拥有”字段:
<code class="java">@ManyToOne(fetch=FetchType.LAZY) @JoinColumn(name="IDAIRLINE", nullable=false) @MapsId public Airline getAirline() { return airline; }</code>
通过指定mappedBy 和@MapsId,您表明Airline 的主键(不是 AirlineFlights 中的 IDAIRLINE 外键)用于定义关系。这将确保航空公司是拥有实体,并且可以根据需要急切或延迟地获取。
以上是JPA 和 Hibernate 中的“MappedBy”如何帮助管理双向关系并提高数据库模式的简单性?的详细内容。更多信息请关注PHP中文网其他相关文章!