Heim > Java > javaLernprogramm > Hauptteil

Wie geht Hibernate mit dem Lebenszyklus der zugehörigen Objekte um?

王林
Freigeben: 2024-04-18 08:42:01
Original
898 Leute haben es durchsucht

Hibernate verwendet unterschiedliche Lebenszyklusstrategien, um verknüpfte Objekte basierend auf dem Zuordnungstyp zu verarbeiten. Zu diesen Strategien gehören die einseitige Eins-zu-viele-Kaskadierung, die zweiseitige eins-zu-viele-Kaskadierung, die viele-zu-eins-Waisenlöschung, die zweiseitige Eins-zu-eins-Kaskadierung usw. In praktischen Anwendungen können Sie je nach Bedarf eine geeignete Strategie auswählen. Durch die Kaskadenlöschung wird beispielsweise sichergestellt, dass alle zugehörigen untergeordneten Entitäten gleichzeitig gelöscht werden, wenn die übergeordnete Entität gelöscht wird. Darüber hinaus bietet Hibernate umfangreiche Mapping-Konfigurationsoptionen wie orphanRemoval und mappedBy, um die Verarbeitung verknüpfter Objekte weiter anzupassen.

Hibernate 如何处理关联对象的生命周期?

Wie Hibernate den Lebenszyklus verwandter Objekte verwaltet

Hibernate ist ein beliebtes Java Object-Relational Mapping (ORM)-Framework, das Java-Objekte automatisch relationalen Datenbanktabellen zuordnet. Beim Umgang mit verwandten Objekten verwendet Hibernate unterschiedliche Lebenszyklusstrategien basierend auf unterschiedlichen Beziehungstypen.

Beziehungstypen

In Hibernate gehören zu den häufigsten Beziehungstypen:

  • One-way one-to-many: Eine Entität bezieht sich auf mehrere Entitäten.
  • Bidirektional eins-zu-viele: Eine Entität bezieht sich auf mehrere Entitäten und wird von mehreren Entitäten gleichzeitig referenziert.
  • Many-to-One: Mehrere Entitäten beziehen sich auf eine Entität.
  • Bidirektional eins-zu-eins: Eine Entität verweist auf eine Entität und wird gleichzeitig von der Entität referenziert.

Lebenszyklusstrategien

Hibernate bietet eine Vielzahl von Lebenszyklusstrategien, um den Lebenszyklus verknüpfter Objekte zu verwalten. Jede Richtlinie hat ihr eigenes, einzigartiges Verhalten, abhängig von der Art der Zuordnung und der Zuordnungskonfiguration.

Einseitig eins-zu-viele

  • Kaskadierende Löschung: Wenn die übergeordnete Entität gelöscht wird, löscht die kaskadierende Löschstrategie automatisch alle zugehörigen untergeordneten Entitäten.
  • Kaskadierende Persistenz: Wenn die übergeordnete Entität beibehalten wird, behält die kaskadierende Persistenzstrategie automatisch alle zugehörigen untergeordneten Entitäten bei.
  • Kaskadenzusammenführung: Wenn eine übergeordnete Entität zusammengeführt wird, führt die Kaskadenzusammenführungsstrategie automatisch alle zugehörigen untergeordneten Entitäten zusammen.
  • Kaskadierende Aktualisierung: Wenn die übergeordnete Entität aktualisiert wird, aktualisiert die kaskadierende Aktualisierungsstrategie automatisch alle zugehörigen untergeordneten Entitäten.
  • Kaskadierende Ablösung: Die kaskadierende Ablösungsstrategie kaskadiert keine Vorgänge an die zugehörigen untergeordneten Entitäten.

Zwei-Wege-Eins-zu-Viele

  • Zwei-Wege-Kaskadierung: Diese Strategie ähnelt der Einweg-Kaskadierung, kaskadiert jedoch Vorgänge in übergeordneten und untergeordneten Entitäten.
  • Kaskadierung von Sammlungen: Diese Strategie kaskadiert nur Vorgänge in Sammlungen untergeordneter Entitäten und nicht an übergeordnete Entitäten.
  • Mapping-Kaskade: Diese Strategie kaskadiert Vorgänge nur in übergeordneten Entitätszuordnungen, nicht in untergeordneten Entitätssammlungen.

Many-to-One

  • Löschung verwaister Objekte: Die Richtlinie zum Löschen verwaister Objekte löscht automatisch eine untergeordnete Entität, wenn sie von keiner übergeordneten Entität mehr referenziert wird.
  • FK-Fremdschlüsseldurchsetzung: Wenn die übergeordnete Entität gelöscht wird, setzt diese Richtlinie den Fremdschlüssel der untergeordneten Entität auf NULL, ohne die untergeordnete Entität automatisch zu löschen. NULL,而不会自动删除子实体。
  • FK 外键取消: 当父实体被删除时,该策略会将子实体的外键设置为 NULL
FK-Fremdschlüsselstornierung:

Wenn die übergeordnete Entität gelöscht wird, setzt diese Strategie den Fremdschlüssel der untergeordneten Entität auf NULL und löscht auch automatisch die untergeordnete Entität.

    Zwei-Wege-Eins-zu-Eins
  • Kaskadierung: Diese Strategie ähnelt der Zwei-Wege-Kaskadierungsstrategie in Zwei-Wege-Eins-zu-Viele.
Hauptkaskadierung:

Diese Strategie kaskadiert Vorgänge nur in der Haupteinheit, nicht an verbundene Einheiten.

Praktischer Fall

Einseitiges, kaskadierendes Eins-zu-viele-Löschen

@Entity
public class Parent {

    @Id
    private Long id;

    @OneToMany(mappedBy = "parent", cascade = CascadeType.ALL)
    private List<Child> children;
    // ...

}

@Entity
public class Child {

    @Id
    private Long id;

    @ManyToOne
    private Parent parent;
    // ...

}
Nach dem Login kopieren
Wenn wir in diesem Beispiel die übergeordnete Entität löschen, werden auch alle zugehörigen untergeordneten Entitäten automatisch gelöscht.

Bidirektionale Eins-zu-Viele-Kaskade

🎜
@Entity
public class Parent {

    @Id
    private Long id;

    @OneToMany(mappedBy = "parent")
    private List<Child> children;
    // ...

}

@Entity
public class Child {

    @Id
    private Long id;

    @ManyToOne
    @JoinColumn(name = "parent_id", nullable = false)
    private Parent parent;
    // ...

}
Nach dem Login kopieren
🎜 Wenn wir in diesem Beispiel die übergeordnete Entität aktualisieren oder die untergeordnete Entität löschen, ist auch das andere Ende der Zuordnung betroffen. 🎜

Das obige ist der detaillierte Inhalt vonWie geht Hibernate mit dem Lebenszyklus der zugehörigen Objekte um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage