永続転送(CASCADE)、孤立オブジェクト


永続的な移行(CASCADE)

  • エンティティを永続的にする場合は、
  • を使用して関連エンティティを永続的に配置することもできます.
  • EX)親エンティティが保存されている場合、子エンティティも一緒に保存されます.
  • @OneToMany(mappedBy="parent", cascade=CascadeType.ALL)
    private List<Child> children = new ArrayList<>();
    
    public void addChild(Child child){
    	children.add(child);
        child.setParent(this);
    }
      try {
        Child child1 = new Child();
        Child child2 = new Child();
        
        Parent parent = new Parent();
        parent.addChild(child1);
        parent.addChild(child2);
        
        em.persist(parent);
        
        tx.commit();
      } catch (Exception e) {
      	tx.rollback();
      } finally {
      	em.close();
      }
    親エンティティを永続化する場合、cascade=CascadeTypeとなります.ALLのため、サブエンティティも一緒に永続化されます.

    CASCADEの注意事項

  • 永続転送CASCADEは、マッピング関連関係とは何の関係もありません.
  • エンティティを永続化する場合、関連付けられたエンティティも、永続化の利便性を提供するだけである.
  • 親によって1つの子のみが管理されます(所有者/単一エンティティが完全に依存している場合)
  • .

    CASCADEタイプ

  • ALL:すべて適用(ストレージ/削除)-親ライフサイクルと子ライフサイクルが本当に一致する場合、
  • PERSIST:永続-
  • のみ格納
  • REMOVE:削除-
  • のみ削除
  • MERGE:合併
  • REFRESH : REFRESH
  • DETACH : DETACH
  • 孤立オブジェクト

  • 孤児オブジェクト:親エンティティに関連付けられていない子エンティティ
  • を自動的に削除します.
  • orphanRemoval = true
  • Parent parent1 = em.find(Parent.class, id); 
    parent1.getChildren().remove(0); // 자식 엔티티를 컬렉션에서 제거
    実行する場合、DELETE FROM CHILD WHERE ID="child 1"

    孤児主義.

  • 孤立Removal=trueは、削除された参照エンティティを他の場所で参照されない孤立オブジェクトと見なして削除する機能です.
  • は、参照ポイント(特定のエンティティがプライベート)である場合に
  • を使用する必要があります.
  • @OneToOne、OneToManyのみ
    参考
  • :概念的に言えば、親が取り除かれると、子供は孤児になる.故に
    あ、オブジェクトの削除機能を有効にすると、親の削除時に子も
    取り除かれる.これはCascadeTypeですREMOVE, CascadeType.動作はALLのようです.
  • ✔ゼロ属性遷移と孤立オブジェクトの混在
    両方のオプションがアクティブな場合、子のライフは親エンティティを通過します.
    管理可能ライフサイクル

    整理する


    CASCADE、孤立オブジェクト親エンティティによる子エンティティのライフサイクル管理
    個々の所有者(特定のエンティティがプライベート)のみで使用する必要があります.