在hibernate中使用@MappedSuperclass进行级联软删除

时间:2014-06-05 06:54:44

标签: java hibernate soft-delete hibernate-cascade

我正在使用复杂的数据库架构开发一个庞大的应用程序。我正在使用SpringHibernate进行开发。 我想知道如何软删除一个实体(活动字段在超类中而不是在所有实体中)。我实施了here提供的建议。

下面是我的实体和hibernate util类的结构

基本实体

@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

}

Hibernate Util Class:

public void remove(TEntity entity) {

    //Note: Enterprise data should be never removed.
    entity.setIsActive(false);
    sessionFactory.getCurrentSession().update(entity);
}

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

  1. 当我删除&#39;角色&#39;实体,所有子实体也应该被删除(仅对所有人进行软删除): - &gt;我是否需要获取父实体,遍历子项并逐个删除?

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

  3. 有一些自我引用列,例如&#39; ParentRoleId&#39;。如果删除了角色,则还应删除其所有引用的角色。 - &GT;我是否需要获取ID然后删除所有自引用的子实体,然后删除每个? 例如:部门可以有一个父部门(通过使用字段:parentdeptid)。如果我删除了父部门,则应删除所有子部门

  4. 如果有人对如何操作有任何建议,请告诉我。

0 个答案:

没有答案