Heim >Java >javaLernprogramm >JPA-Beziehungen: Was ist der Unterschied zwischen „@JoinColumn' und „mappedBy'?

JPA-Beziehungen: Was ist der Unterschied zwischen „@JoinColumn' und „mappedBy'?

DDD
DDDOriginal
2024-12-14 19:32:11689Durchsuche

JPA Relationships: What's the Difference Between `@JoinColumn` and `mappedBy`?

Den Unterschied zwischen JPA JoinColumn und mappedBy verstehen

In JPA werden die Annotationen @JoinColumn und mappedBy verwendet, um Beziehungen zwischen Entitäten zu definieren. Sie spielen jedoch unterschiedliche Rollen beim Aufbau dieser Beziehungen.

JoinColumn-Annotation

Die @JoinColumn-Annotation wird auf der besitzenden Seite einer Beziehung verwendet. Dies bedeutet, dass die mit @JoinColumn annotierte Entität über eine Fremdschlüsselspalte verfügt, die auf die referenzierte Entität verweist. Hier ist ein Beispiel:

@Entity
public class Company {

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    @JoinColumn(name = "companyIdRef", referencedColumnName = "companyId")
    private List<Branch> branches;
    ...
}

In diesem Beispiel ist die Unternehmenseinheit die Eigentümerseite der Beziehung. Es verfügt über eine Fremdschlüsselspalte mit dem Namen „companyIdRef“, die auf die Spalte „companyId“ in der Branch-Entität verweist. Dies zeigt an, dass eine Zweigstellenentität mit einem bestimmten Unternehmen verknüpft ist.

mappedBy-Annotation

Die mappedBy-Annotation wird auf der nicht besitzenden Seite einer Beziehung verwendet. Dies bedeutet, dass die mit „mappedBy“ annotierte Entität über ein Feld verfügt, das den Fremdschlüssel der referenzierten Entität speichert. Hier ist ein Beispiel:

@Entity
public class Company {

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "companyIdRef")
    private List<Branch> branches;
    ...
}

In diesem Beispiel ist die Unternehmenseinheit immer noch die Eigentümerseite der Beziehung. Allerdings ist die Branch-Entität jetzt die umgekehrte Seite. Es verfügt über ein Feld namens „companyIdRef“, das den Fremdschlüssel der besitzenden Entität (Firma) speichert.

Hauptunterschiede

Der Hauptunterschied zwischen @JoinColumn und mappedBy ist dass:

  • @JoinColumn: Gibt die Fremdschlüsselspalte in der besitzenden Entität an.
  • mappedBy: Gibt das Feld in der inversen Entität an, das den Fremdschlüssel der besitzenden Entität enthält.

Bidirektionale Beziehungen

Sowohl @JoinColumn als auch mappedBy ermöglichen bidirektionale Beziehungen zwischen Entitäten. Das bedeutet, dass Sie mithilfe der mit Anmerkungen versehenen Felder von einer Entität zur anderen navigieren können. Es ist jedoch wichtig zu beachten, dass die mit „mappedBy“ annotierte Entität nicht über eigene Kaskadenoperationen verfügt. Dies bedeutet, dass an der inversen Entität vorgenommene Änderungen nicht automatisch an die besitzende Entität weitergegeben werden.

Um vollständige Kaskadenoperationen in bidirektionalen Beziehungen zu ermöglichen, wird empfohlen, @JoinColumn auf der besitzenden Seite und mappedBy auf der inversen Seite zu platzieren Seite. Dadurch wird sichergestellt, dass Änderungen an einer Entität ordnungsgemäß auf die andere übertragen werden.

Das obige ist der detaillierte Inhalt vonJPA-Beziehungen: Was ist der Unterschied zwischen „@JoinColumn' und „mappedBy'?. 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