3

我正在开发一个具有复杂数据库模式的大型应用程序。我正在使用SpringHibernate开发。我想知道如何软删除一个实体(活动字段在超类中,而不是在所有实体中)。我实施了此处提供的建议。

下面是我的实体和休眠实用程序类的结构

基础实体

@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);
}

现在我对此有一些要求,我现在无法解决。

  1. 当我删除“角色”实体时,所有子实体也应被删除(仅对所有实体进行软删除):->我是否需要获取父实体,遍历子实体并一一删除?

  2. 角色具有与另一个实体“部门”的外键引用。如果一个部门被删除,相关的角色应该被有条件地删除(即,只有当调用者决定:在某些情况下,我们不想删除被引用的实体)。

  3. 有一些自引用列,例如“ParentRoleId”。如果一个角色被删除,它所有引用的角色也应该被删除。-> 我是否需要获取 ID,然后删除所有自引用的子实体,然后删除每个实体?例如:部门可以有一个父部门(通过使用字段:parentdeptid)。如果我删除一个父部门,所有子部门都应该被删除

如果有人对如何执行此操作有任何建议,请告诉我。

4

0 回答 0