我正在开发一个具有复杂数据库模式的大型应用程序。我正在使用Spring
和Hibernate
开发。我想知道如何软删除一个实体(活动字段在超类中,而不是在所有实体中)。我实施了此处提供的建议。
下面是我的实体和休眠实用程序类的结构
基础实体
@MappedSuperclass
public abstract class BaseEntity<TId extends Serializable> implements IEntity<TId> {
@Basic
@Column(name = "IsActive")
protected boolean isActive;
public Boolean getIsActive() {
return isActive;
}
public void setIsActive(Boolean isActive) {
isActive= isActive;
}
}
子实体:
@Entity(name="Role")
@Table(schema = "dbo")
public class Role extends BaseEntity {
//remaining fields
//1. foreign key reference to another entity
//2. List<Child> entities
//3. Self reference fields
}
休眠实用程序类:
public void remove(TEntity entity) {
//Note: Enterprise data should be never removed.
entity.setIsActive(false);
sessionFactory.getCurrentSession().update(entity);
}
现在我对此有一些要求,我现在无法解决。
当我删除“角色”实体时,所有子实体也应被删除(仅对所有实体进行软删除):->我是否需要获取父实体,遍历子实体并一一删除?
角色具有与另一个实体“部门”的外键引用。如果一个部门被删除,相关的角色应该被有条件地删除(即,只有当调用者决定:在某些情况下,我们不想删除被引用的实体)。
有一些自引用列,例如“ParentRoleId”。如果一个角色被删除,它所有引用的角色也应该被删除。-> 我是否需要获取 ID,然后删除所有自引用的子实体,然后删除每个实体?例如:部门可以有一个父部门(通过使用字段:parentdeptid)。如果我删除一个父部门,所有子部门都应该被删除
如果有人对如何执行此操作有任何建议,请告诉我。