Heim >Java >javaLernprogramm >JPA-Beziehungen: Was ist der Unterschied zwischen „@JoinColumn' und „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:
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!