0

2つのエンティティOrderとItemがあり、それらは1:Nとして関連付けられています。Orderは親テーブルであり、itemは子テーブルです。注文を削除するときに、対応するアイテムも削除したい。しかし、それは起こりません。むしろ、子テーブルのOrderIdを「null」として設定しています。これは、アイテムテーブルのデータベースに孤立した行を作成しています。

これが私の構成です:私はSpring、HibernateをJPAVendorおよびmysqlデータベースとして使用しています


@Entity
@Table(name="T_ORDER")
public class Order {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Long id;

    private String customer;

    @OneToMany(cascade=CascadeType.ALL)
    @JoinColumn(name="ORDER_ID")
    private Collection items = new LinkedHashSet();
}

アイテムエンティティ


@Entity
public class Item {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Long id;

    @ManyToOne
    private Order order;

    private String product;

    private double price;

    private int quantity;

2JPAプロパティしか設定していません


key="hibernate.show_sql"=true 
key="hibernate.hbm2ddl.auto"

この問題を解決するために他に何をする必要があるのか​​理解できません。

4

3 に答える 3

0

orphanRemoval = trueは、子テーブルに孤立がないことを保証します。


@OneToMany(cascade=CascadeType.ALL, orphanRemoval=true )
于 2012-12-13T20:18:51.460 に答える
0

JPAカスケード– javax.persistence.CascadeTypeを削除し、Hibernateカスケード– org.hibernate.annotations.CascadeCascadeType.XXXXXに置き換えます。

JPAとHibernateカスケードアノテーションの間で互換性のない問題のように見えます。

JPAはサポートのみ

– Persist 
– Merge 
– Remove
– Refresh
– All

JAPAは現在、これらのHibernateの追加の追加のカスケードオプションを提供していません。カスケードオプション

– save-update 
– delete
– lock
– evict
– delete-orphan
于 2012-12-14T04:52:50.647 に答える
0

@OneToMany(cascade = CascadeType.ALL、insertable = true、updatable = true)@JoinColumn(name = "ORDER_ID")

于 2013-02-25T10:09:35.347 に答える