質問

私は問題な @OneToMany マッピングを親子団体をいう。すべての作品も、そのデータは削除された時は、削除するものと期待される。

の親会社

@Entity
public class Parent {
    @Id
    @Column(name = "ID")
    private Long id;

    @OneToMany(cascade = {CascadeType.ALL}, mappedBy = "parent")
    private Set<Child> childs = new HashSet<Child>();

 ...
}

子:

@Entity
public class Child {
    @Id
    @Column(name = "ID")
    private Long id;

    @ManyToOne(cascade = CascadeType.ALL)
    @JoinColumn(name="PARENTID", nullable = false)
    private Parent parent;

  ...
}

その削除ンセのお父様(お義母様とは離婚の子供の設定は取得しませんから削除され、データベースです。たじる child.parent 参考りませんでした作品。

公開用ウェブアプリケーションの削除が起こるとして、Ajaxます。んの一覧を削除子供の場合は、保存ボタンを押すことできないの削除については、暗黙のうちに.

役に立ちましたか?

解決

JPA会員企業の行動が正しいという どの仕様):オブジェまではんだを除去してからOneToManyます。あるベンダー固有の拡張るものがネイティブJPAな対応です。

その一因としてはJPAなんかになるような場合は削除ものから削除されます。オブジェクトモデリング条件の違い 構成 と"集約*.

構成, の子実体のない存在なのです。クラシックの例はハウスやお部屋です。削除のお部屋に行く。

凝集 はゆうびに代表されるコースです。削除のコースの学生が存在する(おそらくその他。

ばなければなりませんでしのいずれかを使用ベンダー固有の拡張をこの行動について利用可能な場合)または明示的に削除し、子どもから取り出して親ることになります。

私が認識し:

他のヒント

cletus'回答に加えて、 JPA 2.0 に、最終的な2010年12月以来、orphanRemoval注釈の@OneToMany属性を紹介します。 詳細については、こののブログエントリを参照してください。

の仕様は比較的新しいものであるので、全てではないJPA 1プロバイダは、最終的なJPA 2実装を持っていることに留意されたいです。たとえば、を休止rel="noreferrer">。

あなたはこれを試すことができます:

@OneToOne(orphanRemoval=true) or @OneToMany(orphanRemoval=true)ます。

で説明したように、それは私がJPAでやりたいことはできませんので、私はこれで、hibernate.cascadeアノテーションを使用し、親クラス内の関連するコードは次のようになります:

@OneToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH}, mappedBy = "parent")
@Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE,
            org.hibernate.annotations.CascadeType.DELETE,
            org.hibernate.annotations.CascadeType.MERGE,
            org.hibernate.annotations.CascadeType.PERSIST,
            org.hibernate.annotations.CascadeType.DELETE_ORPHAN})
private Set<Child> childs = new HashSet<Child>();

私はこのような単純な使用「ALL」を同様に親を削除しているだろうことができませんでした。

このカスケードの除去にすることで、子どもたちは削除された場合を削除します。ない。ご利用の場合は、HibernateおJPAを使用したプログラミング方法、プロバイダに行うことができるので利用 hibernateの特定のカスケード.

あなたはこれを試すことができます:

@OneToOne(cascade = CascadeType.REFRESH) 

または

@OneToMany(cascade = CascadeType.REFRESH)
@Entity 
class Employee {
     @OneToOne(orphanRemoval=true)
     private Address address;
}

ここのを参照してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top