我尝试删除一个实体,该实体是另一个实体(one-to-many
)的子代。
问题是:
如果父级设置了层叠类型,则无法直接删除子级。删除命令将被忽略(使用JpaRepository
)。只有删除级联设置,我才能删除子级。
没有本机SQL语句,有没有办法做到这一点?
父实体:
@Entity
public class ExplorerItem {
...
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "explorerItem")
private Set<UserACL> userAcls = new HashSet<>();
...
}
子实体:
@Entity
public class UserACL {
...
@ManyToOne
private ExplorerItem explorerItem;
...
}
我正在使用由Spring Boot创建的JpaRepositories
:
public interface UserACLRepository extends JpaRepository<UserACL, Long> {
void deleteByUser(User user);
}
答案 0 :(得分:0)
您可以在orphanRemoval="true"
批注中设置@OneToMany
。将orphanRemoval设置为true会自动删除断开连接的实体引用。另一方面,如果仅指定CascadeType.Remove
,则不会执行任何操作,因为它将仅与关联断开连接,这并不等同于删除对象。
例如。
@Entity
public class ExplorerItem {
...
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval="true", mappedBy = "explorerItem")
private Set<UserACL> userAcls = new HashSet<>();
...
}