我正在使用 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;
...
}
现在,我的问题是,使用给定的架构
- 当我从子项(即产品)中删除一行时,供应商也会被删除吗?
- 或者,只有当父级(即供应商)被删除时,才会级联删除所有子“产品”
谢谢。
最佳答案
当供应商因 OnDelete 注释而被删除时,该产品也会被删除。
仅当模式由 Hibernate 生成时才使用 OnDelete 注释。它在数据库中配置外键,以便当删除引用的行时,包含外键的行也会被删除。
参见http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/#entity-hibspec-singleassoc
但是当您删除产品时,Hibernate 也会删除供应商(这可能不是您想要的),因为关联上设置了 CascadeType.ALL。您应该删除此属性:当供应商的产品之一被删除时,没有理由删除该供应商。
关于hibernate - JPA实体关系: Cascade on delete,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10913715/