更新子删除的关联

时间:2018-01-06 07:02:23

标签: java jpa-2.0

我有三个实体类。 产品,类别和子类别。

类别与SubCategory具有OneToMany关系

@Entity
@Table(name = "CATEGORY")
public class Category {

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
@Column(name = "category_id")
private Long categoryId;

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, orphanRemoval = true)
@JoinColumn(name = "category_id")
private List<SubCategory> subCategories;

}

该产品与一个类别及其子类别之一

相关联
@Entity
@Table(name = "PRODUCTS")
public class Product {

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
@Column(name = ("id"))
private Long id;

@ManyToOne
@JoinColumn(name = "category", unique = false, nullable = true, insertable = true, updatable = true)
private Category category;

@ManyToOne
@JoinColumn(name = "sub_category", unique = false, nullable = true, insertable = true, updatable = true)
private SubCategory subCategory;

}

现在,如果删除一个类别,它的所有SubCatogries都会被删除,但我也希望将Product中的关联更新为null。我想过手动获取具有相关删除类别的所有产品并手动更新它们,但是有没有办法用JPA注释处理这个?

2 个答案:

答案 0 :(得分:1)

从性能角度来看,JPA的这一更新效率非常低。

您的表产品具有列 category abd sub_category ,它们通过外键与对应的表链接。添加到每个列的定义结束字符串&#39; ON DELETE SET NULL&#39;你想要的将由数据库自动完成。

答案 1 :(得分:0)

产品实体与 SubCategory 具有ManyToOne关系,这意味着 SubCategory 实体具有 OneToMany 关系使用产品。因此,在已定义OneToMany关系的 SubCategory 类中,您需要提及cascadetype = remove

  

@manytoone(cascade = cascadetype.remove)

希望它能解决你的问题