我正在使用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;
...
}
现在,我的问题是,使用给定的架构
感谢。
答案 0 :(得分:5)
由于OnDelete注释而移除供应商时,产品将被删除。
仅当Hibernate生成模式时才使用OnDelete注释。它配置数据库中的外键,以便在删除引用的行时,也删除包含外键的行。
请参阅http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/#entity-hibspec-singleassoc
但是,当您删除产品(可能不是您想要的产品)时,Hibernate也会删除供应商,因为在关联上设置了CascadeType.ALL。您应该删除此属性:没有理由在删除其中一个产品时删除供应商。