JPA实体关系:级联删除

Jaz*_*azB 3 hibernate jpa cascade

我使用spring,JPA和Hibernate.

我有以下实体:

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

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

   ...
}
Run Code Online (Sandbox Code Playgroud)

和,

@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;

   ...
}
Run Code Online (Sandbox Code Playgroud)

现在,我的问题是,给定的架构

  1. 当我从孩子(即产品)中删除一行时,供应商是否也会被删除?
  2. 或者,只有当父(即供应商)被删除时,它才会被级联以删除所有子项'产品'

谢谢.

JB *_*zet 6

由于OnDelete注释,在删除供应商时将删除该产品.

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

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

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

  • 我已经回答过两次这个问题.**阅读**我的答案. (4认同)