首页 > 解决方案 > 删除主实体时如何将子实体保留在数据库中

问题描述

我正在使用 Hibernate,并且在我的实体中有一对多的关系。

public MyClass{

     @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
     private Set<MyObject> myObject= new HashSet<>();

     // some other fields
}

MyObject 实际上不仅是子实体。它是我的应用程序中的主要实体。因此,当我删除 MyClass 实体时,我不想删除数据库 MyObject 表中的 myObject。

我的用法是这样的:

1)持久化MyClass实体,所以MyObject实体也被持久化了。2)稍后我需要删除 MyClass 实体,但需要保留在第一步中保留的 MyObject 记录。

我尝试使用CascadeType.PERSIST,但它创建了一个对 MyObject 表的选择查询,因为它找不到给定的 myObject 对象的记录,所以它抛出异常。因此我正在使用CascadeType.ALL. 但是此时,当我通过 JpaRepository 的 deleteById 方法删除实体时,它也会删除 MyObject 实体。

如何在不删除 MyObject 实体的情况下执行删除?

标签: hibernateone-to-manyhibernate-mappingcascading-deletes

解决方案


推荐阅读