Heim  >  Artikel  >  Java  >  Wie hilft „MappedBy“ in JPA und Hibernate dabei, bidirektionale Beziehungen zu verwalten und die Einfachheit von Datenbankschemata zu verbessern?

Wie hilft „MappedBy“ in JPA und Hibernate dabei, bidirektionale Beziehungen zu verwalten und die Einfachheit von Datenbankschemata zu verbessern?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-03 13:01:30878Durchsuche

How does `MappedBy` in JPA and Hibernate help manage bidirectional relationships and improve database schema simplicity?

Verstehen von MappedBy in JPA und Hibernate

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.

Empfohlene Verwendung von MappedBy

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.

Zweck von MappedBy

MappedBy dient mehreren wichtigen Zwecken:

  • Verhindert, dass der SQL-Join Informationen dupliziert: Ohne „mappedBy“ würde der Join zwischen Airline und AirlineFlights sowohl den IDAIRLINE-Primärschlüssel als auch den Fremdschlüssel in der AirlineFlights-Tabelle enthalten. Dies könnte zu Datenduplizierung und Leistungsproblemen führen.
  • Verbessert die Einfachheit des Datenbankschemas: Durch die Verwendung von „mappedBy“ stellen Sie sicher, dass nur eine Tabelle den Fremdschlüssel enthält, was zu einer einfacheren und normalisierten Datenbank führt Schema.
  • Unterstützt bidirektionale Navigation: Es ermöglicht Ihnen, die Beziehungen in beide Richtungen (von Airline zu AirlineFlights und umgekehrt) zu durchlaufen, ohne explizite Join-Abfragen zu schreiben.

Ihr spezifisches Szenario

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn