Heim >Java >javaLernprogramm >Wie hilft „MappedBy' in JPA und Hibernate dabei, bidirektionale Beziehungen zu verwalten und die Einfachheit von Datenbankschemata zu verbessern?
MappedBy spielt eine entscheidende Rolle bei der Verwaltung bidirektionaler Beziehungen in Java Persistence API (JPA) und Hibernate für die objektrelationale Zuordnung. Dies ist eine praktische Möglichkeit, komplexe Beziehungen in einem Datenbankkontext zu modellieren und zu navigieren.
In Ihrem speziellen Beispiel, in dem die Fluggesellschaft viele AirlineFlights besitzt und viele AirlineFlights zu einer Fluggesellschaft gehören , mappedBy wird verwendet, um eine wiederholte Informationsspeicherung zu vermeiden. Da AirlineFlights die eigene Klasse sein soll, geben Sie das Attribut „mappedBy“ in der Klasse „Airline“ an:
<code class="java">@OneToMany(fetch=FetchType.LAZY, cascade = {CascadeType.ALL}) @JoinColumn(name="IDAIRLINE") public Set<AirlineFlight> getAirlineFlights() { return airlineFlights; }</code>
Der Parameter „mappedBy“ in der Annotation @OneToMany gibt an, dass die Spalte IDAIRLINE in der Tabelle „AirlineFlights“ ein Fremdschlüssel ist das wird wieder dem Primärschlüssel in der Airline-Tabelle zugeordnet. Auf diese Weise können Sie beim Abfragen eines Airline-Objekts auch die zugehörigen AirlineFlights mühelos abrufen.
MappedBy dient mehreren wichtigen Zwecken:
In Ihrem Beispiel verfügt die Tabelle „AirlineFlights“ über die Spalte „IDAIRLINE“ als Fremdschlüssel, der auf die Tabelle „Airline“ verweist, aber die Tabelle „Airline“ verfügt über keine entsprechende Spalte „IDAIRLINEFLIGHTS“. Dieses Setup legt nahe, dass AirlineFlights die Eigentümereinheit ist, auch wenn Sie Airline als Eigentümer benötigen.
Um dieses Problem zu beheben, müssen Sie die Anmerkungen entsprechend anpassen. Die @OneToMany-Annotation zu „airlineFlights“ sollte in die Klasse „AirlineFlight“ verschoben werden, und das Attribut „mappedBy“ sollte auf das Feld „owning“ in der Klasse „Airline“ verweisen:
<code class="java">@ManyToOne(fetch=FetchType.LAZY) @JoinColumn(name="IDAIRLINE", nullable=false) @MapsId public Airline getAirline() { return airline; }</code>
Durch die Angabe von „mappedBy“ und „@MapsId“ geben Sie an, dass die Der Primärschlüssel der Fluggesellschaft (nicht der Fremdschlüssel IDAIRLINE in AirlineFlights) wird zur Definition der Beziehung verwendet. Dadurch wird sichergestellt, dass die Fluggesellschaft die Eigentümerin ist und je nach Bedarf eifrig oder träge abgerufen werden kann.
Das obige ist der detaillierte Inhalt vonWie hilft „MappedBy' in JPA und Hibernate dabei, bidirektionale Beziehungen zu verwalten und die Einfachheit von Datenbankschemata zu verbessern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!