首页 > 解决方案 > 孤儿删除不适用于 session.update 功能

问题描述

我有@OneToMany关系。父实体也有瞬态字段。我想在保存或更新后保留这些瞬态字段。此外,我希望休眠以孤立删除子实体。如果我使用 entityManager.merge,hibernate orphan 会删除子实体,但也不会保留瞬态字段。如果我使用 session.saveOrUpdate,它会保留瞬态字段但不会孤立删除。

示例实体;

@Table(name = "parent_entity")
@Entity(name = "ParentEntity")
public class ParentEntity extends PersistentEntity {
    
    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "inner_entity")
    private InnerEntity innerEntity = new InnerEntity();
    
    @Transient
    private SomePojo transientField;


    public InnerEntity getInnerEntity() {
        return innerEntity;
    }

    public void setInnerEntity(InnerEntity innerEntity) {
        this.innerEntity = innerEntity;
    }
    
}

@Table(name = "parent_entity")
@Entity(name = "ParentEntity")
public class ParentEntity extends PersistentEntity {
    
    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "inner_entity")
    private InnerEntity innerEntity = new InnerEntity();

    public InnerEntity getInnerEntity() {
        return innerEntity;
    }

    public void setInnerEntity(InnerEntity innerEntity) {
        this.innerEntity = innerEntity;
    }
    
}

@Table(name = "child_entity")
@Entity(name = "ChildEntity")
public class ChildEntity extends PersistentEntity {
    
    @ManyToOne
    @JoinColumn(name = "inner_entity")
    private InnerEntity innerEntity;
    
    @Column(name = "child_value")
    private String childValue;

    public InnerEntity getInnerEntity() {
        return innerEntity;
    }

    public void setInnerEntity(InnerEntity innerEntity) {
        this.innerEntity = innerEntity;
    }

    public String getChildValue() {
        return childValue;
    }

    public void setChildValue(String childValue) {
        this.childValue = childValue;
    }

    
    
}

正如我所说,我想在父级上操作保存和更新,我希望休眠保持瞬态字段并进行孤立删除。

我已经尝试过 entityManager.merge 和 session.saveOrUpdate 但没有一个能满足我的要求。

谢谢。

标签: javahibernatejpaentitymanagerhibernate-entitymanager

解决方案


推荐阅读