2017-11-27 11 views
0

を削除私は2つの形で自分自身との関係を持つエンティティオブジェクトを持っている:JPAエンティティ自体との関係とカスケードが

  1. エンティティは、そのエンティティ
  2. エンティティのリストを参照している、エンティティ(mainOrder)を参照してください。オーダーのための優れた現在のenitity

Javaクラス:

@Entity 
@Table(name = "shop_order") 
public class ShopOrder { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "ID", columnDefinition = "serial") 
    private Long id; 

    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "main_id", 
      nullable = true) 
    private ShopOrder mainOrder; 

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "id") // I am not sure here should be id or mainOrder 
    private Set<ShopOrder> subOrders = new HashSet<>(); 

    // some others columns, and getters and setters 
} 

缶カスケードのエンティティを確実に削除する方法を教えてください。何らかの注文が削除され、サブノードも削除される必要があります(これは、注文をmainOrderとして削除した注文を意味します)

+1

をそれは '@OneToMany(mappedBy = "mainOrder")でなければなりません'。削除をカスケードする必要がある他のアソシエーションについては、カスケード削除を実行します: 'cascade = CascadeType.REMOVE'。尋ねる前に、コードをテストして実験をするのはなぜですか? –

+0

そのお返事ありがとうございます。問題はJPAとHibernateで新しく、jpaやhibernateのカスケード機能の使い方がわかりません。あなたはそれで答えを加えることができますか? –

+0

それでは、マニュアルを読むのはなぜですか?それはそれが書かれているものです。 –

答えて

0

mappedByは、ShopOrderの後方参照であるクラスShopOrderの属性名です。

カスケードは、アノテーションで定義することができますが、

@OneToMany(fetch = FetchType.LAZY, mappedBy = "mainOrder", cascade = CascadeType.REMOVE) 
private Set<ShopOrder> subOrders = new HashSet<>(); 

Hibernateのマニュアルにカスケードについてもっと読むカスケード属性:

http://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/Hibernate_User_Guide.html#pc-cascade

関連する問題