JPA实体关系:级联删除

时间:2012-06-06 11:55:38

标签: hibernate jpa cascade

我正在使用spring,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. 或者,只有当父母(即供应商)被删除时才会被级联以删除所有子项'产品'
  3. 感谢。

1 个答案:

答案 0 :(得分:5)

由于OnDelete注释而移除供应商时,产品将被删除。

仅当Hibernate生成模式时才使用OnDelete注释。它配置数据库中的外键,以便在删除引用的行时,也删除包含外键的行。

请参阅http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/#entity-hibspec-singleassoc

但是,当您删除产品(可能不是您想要的产品)时,Hibernate也会删除供应商,因为在关联上设置了CascadeType.ALL。您应该删除此属性:没有理由在删除其中一个产品时删除供应商。