Definieren von Beziehungen mit Annotationen in Hibernate 4 mit Spring
Um verschiedene Arten von Beziehungen mithilfe von Annotationen in Hibernate 4 für die bereitgestellten Klassen zu implementieren, Foo und Bar, schauen wir uns die Einzelheiten an.
Eins-zu-viele Unidirektionale Beziehung:
Konfigurieren Sie die Foo-Klasse mit der @OneToMany-Annotation und einer List
Bidirektionale Eins-zu-Viele-Beziehung (verwaltet von Foo.class ):
Verwenden Sie die @OneToOne-Annotation mit cascade = CascadeType.ALL auf Foo.class. Fügen Sie eine @JoinColumn-Annotation hinzu, die die Spalte in Bar.class angibt, die für den Join verwendet werden soll. Verwenden Sie für Bar.class die Annotation @OneToOne und geben Sie mappedBy = "bar" an, um anzugeben, dass die Beziehung von Foo.class verwaltet wird.
Eins-zu-viele unidirektionale Beziehung mit Benutzer- verwaltete Join-Tabelle:
Verwenden Sie die Annotation @OneToMany mit einer Annotation @JoinTable, um eine separate Join-Tabelle anzugeben. Definieren Sie die Join-Spalten mit @JoinColumn-Anmerkungen auf beiden Seiten. Verwenden Sie bei Bedarf eine zusätzliche Klasse, um die Join-Tabelle darzustellen.
Bidirektionale Eins-zu-Viele-Beziehung mit Fremdschlüsselzuordnung:
Auf Foo.class, Verwenden Sie @OneToMany(mappedBy = "bar"), um die Beziehung abzubilden. Verwenden Sie auf Bar.class @ManyToOne(cascade = { CascadeTyep.PERSIST, CascadeType.MERGE, CascadeType.REFRESH }) mit einer @JoinColumn-Annotation.
Bidirektionale Many-to-Many mit Hibernate -verwaltete Join-Tabelle:
Verwenden Sie @ManyToMany für beide Foo.class und Bar.class und verwenden Sie eine @JoinTable-Annotation für die Join-Tabelle, die die Join-Spalten angibt.
Bidirektionale Many-to-Many mit benutzerverwaltetem Join-Tabellenobjekt:
Ähnlich wie beim unidirektionalen Eins-zu-viele-Beispiel verwenden Sie @OneToMany mit einer @JoinTable-Annotation. Erstellen Sie eine separate Klasse, um die Join-Tabelle darzustellen und die Beziehung sowohl auf Foo.class als auch auf Bar.class mit @ManyToOne zuzuordnen.
Bestimmen des Abruftyps:
Verwenden Sie fetchType .LAZY, um das Laden verwandter Sammlungen zu verzögern, bis auf sie zugegriffen wird. Verwenden Sie fetchType.EAGER, um die Sammlung sofort zu laden. Beachten Sie jedoch, dass dies Auswirkungen auf die Leistung haben kann. Erwägen Sie die Verwendung von Hibernate.initialize() in Ihrer Service-Klasse, um verzögert geladene Sammlungen für bestimmte Anwendungsfälle manuell zu initialisieren.
Bestimmen der Kaskadenrichtung:
Verwenden Sie die Annotation @Cascade, um Geben Sie Kaskadierungsoptionen an. Im Allgemeinen kaskadieren Veränderungen in der Richtung der Eigentümerbeziehung. Vermeiden Sie kaskadierende Aktualisierungen oder Löschungen vom untergeordneten zum übergeordneten Element, wenn dies im Anwendungskontext keinen Sinn ergibt.
Orphan Removal:
Setzen Sie orphanRemoval = true auf der @OneToMany-Anmerkung, damit Hibernate verwaiste Objekte (d. h. solche, die keinem anderen übergeordneten Objekt zugeordnet sind) automatisch löscht, wenn sie aus der Sammlung des übergeordneten Objekts entfernt werden Objekt.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3