hibernate - JPA实体关系: Cascade on delete

标签 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. 或者,只有当父级(即供应商)被删除时,才会级联删除所有子“产品”

谢谢。

最佳答案

当供应商因 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/

相关文章:

java.lang.NoSuchMethodError : org. hibernate.SessionFactory.openSession()Lorg/hibernate/classic/Session

java - hibernate 对不同的列使用两个外键?

hibernate - JPA 如何与 EntityManager.find() 一起处理部分、非不相交的继承(在每表类场景中使用 InheritanceType.JOINED)?

c# - 导航属性和级联删除

sql - 如何强制oracle在不删除/重新创建约束的情况下进行级联删除

java - 我想要获得一周的值(value)

java - 通过保存 Hibernate InvocationTargetException

java - 具有连接和排序依据的查询生成器?

java - JPA - 没有连接列的一对多关联

具有 FK 约束的 MySQL/InnoDB : find tables/rows affected by cascaded delete