ホームページ  >  記事  >  Java  >  Hibernate は関連オブジェクトのライフサイクルをどのように処理しますか?

Hibernate は関連オブジェクトのライフサイクルをどのように処理しますか?

王林
王林オリジナル
2024-04-18 08:42:01901ブラウズ

Hibernate は、さまざまなライフサイクル戦略を使用して、関連付けタイプに基づいて関連付けられたオブジェクトを処理します。これらの戦略には、一方向 1 対多のカスケード、双方向 1 対多の双方向カスケード、多対 1 の孤立した削除、双方向 1 対 1 のカスケードなどが含まれます。実際のアプリケーションでは、ニーズに応じて適切な戦略を選択できます。たとえば、カスケード削除では、親エンティティが削除されるときに、関連するすべての子エンティティが同時に削除されます。さらに、Hibernate は、関連付けられたオブジェクトの処理をさらにカスタマイズするために、orphanRemoval や mappedBy などの豊富なマッピング構成オプションも提供します。

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

Hibernate が関連オブジェクトのライフサイクルを処理する方法

Hibernate は、Java オブジェクトを自動的にマッピングできる人気の Java オブジェクト リレーショナル マッピング (ORM) フレームワークです。リレーショナル データベース テーブル。関連オブジェクトを処理する場合、Hibernate はさまざまな関係タイプに基づいてさまざまなライフサイクル戦略を使用します。

関連付けタイプ

Hibernate では、一般的な関連付けタイプは次のとおりです。

  • 一方向 1 対多: 1 つのエンティティが複数を参照します。実在物。
  • 双方向 1 対多: 1 つのエンティティは複数のエンティティを参照し、同時に複数のエンティティによって参照されます。
  • 多対 1: 複数のエンティティが 1 つのエンティティを参照します。
  • 双方向 1 対 1: エンティティはエンティティを参照し、同時にエンティティによって参照されます。

ライフ サイクル戦略

Hibernate は、関連するオブジェクトのライフ サイクルを処理するためのさまざまなライフ サイクル戦略を提供します。各ポリシーには、関連付けのタイプとマッピング構成に応じて、独自の固有の動作があります。

1 対 1 対多

  • カスケード削除: 親エンティティが削除されると、カスケード削除ポリシー関連付けられたすべての子エンティティが自動的に削除されます。
  • カスケード永続性: 親エンティティが永続化されると、カスケード永続化戦略により、関連付けられたすべての子エンティティが自動的に永続化されます。
  • カスケード マージ: 親エンティティがマージされると、カスケード マージ戦略により、関連するすべての子エンティティが自動的にマージされます。
  • カスケード更新: 親エンティティが更新されると、カスケード更新戦略により、関連付けられているすべての子エンティティが自動的に更新されます。
  • カスケード分離: カスケード分離戦略では、関連する子エンティティに操作がカスケードされません。

双方向 1 対多

  • 双方向カスケード: この戦略は、一方向のカスケードに似ています。 、ただし、親エンティティと子エンティティでカスケード操作が行われます。
  • コレクション カスケード: この戦略は、子エンティティ コレクション内の操作のみをカスケードし、親エンティティにはカスケードしません。
  • マッピング カスケード: この戦略は、親エンティティ マッピング内の操作のみをカスケードし、子エンティティ コレクションにはカスケードしません。

多対 1

  • 孤立した削除: 子エンティティがどの親エンティティからも参照されなくなった場合、孤立 削除ポリシーにより、子エンティティが自動的に削除されます。
  • FK 外部キーの強制: 親エンティティが削除されると、このポリシーは、子エンティティを自動的に削除せずに、子エンティティの外部キーを NULL に設定します。 。
  • FK 外部キーのキャンセル: 親エンティティが削除されると、この戦略は子エンティティの外部キーを NULL に設定し、子も自動的に削除します。実在物。 。

双方向 1 対 1

  • カスケード: この戦略は双方向カスケードに似ています。双方向の 1 対多戦略で。
  • メイン カスケード: この戦略は、メイン エンティティ内の操作のみをカスケードし、関連エンティティにはカスケードしません。

実践的なケース

一方向の 1 対多のカスケード削除

@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;
    // ...

}

この例では、親エンティティを削除すると、に関連付けられているすべての子エンティティも自動的に削除されます。

双方向 1 対多双方向カスケード

@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;
    // ...

}

この例では、親エンティティを更新するか子エンティティを削除すると、関連付けの他端はも影響を受けます。

以上がHibernate は関連オブジェクトのライフサイクルをどのように処理しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。