3

春、JPA、Hibernate を使用しています。

次のエンティティを取得しました。

@Entity
@Table(name = "Supplier")
public class Supplier {

   @Id
   @Column(name = "Supplier_ID", nullable = false)
   private Integer supplierId;

   ...
}

と、

@Entity
@Table(name = "Product")
public class Product {

   @Id
   private Integer productId;

   @ManyToOne(cascade = CascadeType.ALL)
   @OnDelete(action = OnDeleteAction.CASCADE)
   @JoinColumn(name = "Supplier_ID")
   private Supplier supplier;

   ...
}

さて、私の質問は、与えられたスキーマで

  1. 子 (製品) から行を削除すると、サプライヤーも削除されますか?
  2. または、親(つまり、サプライヤー)が削除された場合にのみ、すべての子「製品」を削除するためにカスケードされます

ありがとう。

4

1 に答える 1

6

OnDelete アノテーションによりサプライヤーが削除されると、製品は削除されます。

OnDelete アノテーションは、スキーマが Hibernate によって生成される場合にのみ使用されます。参照された行が削除されると、外部キーを含む行も削除されるように、データベースの外部キーを構成します。

http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/#entity-hibspec-singleassocを参照してください。

しかし、関連付けに CascadeType.ALL が設定されているため、Hibernate は、製品を削除するときにサプライヤも削除します (これはおそらく必要ではありません)。この属性を削除する必要があります。製品の 1 つが削除された場合、サプライヤーを削除する理由はありません。

于 2012-06-06T13:37:36.393 に答える