java - "orphanRemoval = true"删除操作时未删除子对象

标签 java hibernate jpa orm hibernate-mapping

以下两个类(CD 和 DVD)彼此不相关。每个类都有不同的表。但都有子类,如地址。

保存 DVD/CD 的值时,条目插入到相应的表中。因此,当我尝试在 Address_Table 中添加值时,它使用 CD 和 DVD 的主键正确插入。

当我试图删除 Address_Table 中的条目时,它并没有删除 我认为使用“orphanRemoval = true”是行不通的。

对于这个场景,要使用任何相关的注释吗?因为在使用 xml 文件时它工作正常。

//DVD类

@Entity
@Table(name="DVD_Table")
public class DVDPO{

    //some code

    @OneToMany(fetch = FetchType.LAZY,targetEntity=com.AddressPO.class,cascade=CascadeType.ALL, orphanRemoval = true)
    @MapKeyColumn(name="LOG_GUID")
    @JoinColumn(name = "FK_GUID")
    private Map<String, PersistentObject> auditEntry = new HashMap<String, PersistentObject>();

}

//光盘类

@Entity
@Table(name="CD_Table")
public class CDPO{

    //some code

    @OneToMany(fetch = FetchType.LAZY,targetEntity=com.AddressPO.class,cascade=CascadeType.ALL, orphanRemoval = true)
    @MapKeyColumn(name="LOG_GUID")
    @JoinColumn(name = "FK_GUID")
    private Map<String, PersistentObject> auditEntry = new HashMap<String, PersistentObject>();

}

//地址类

@Entity
@Table(name="Address_Table")
public class AddressPO{

    @Any(metaColumn = @Column(name = "CLASS_NAME"), fetch = FetchType.EAGER)
    @AnyMetaDef(idType = "java.lang.String", metaType = "string", metaValues = {
            @MetaValue( targetEntity = com.DVDPO.class, value = "DVD"),
            @MetaValue(targetEntity = com.CDPO.class, value = "CD"),    

   @JoinColumn(name="FK_GUID")
   private PersistentObject persistentObject;
}

最佳答案

要删除 AddressPO,您必须取消它与关联到当前 Session 的 DVDPO 和 CDPO 对象的关联。

PersistentObject po = ...;
DVDPO dvdpo = ...;
CDPO cdpo = ...;
dvdpo.getAuditEntry().values().remove(po);
cdpo.getAuditEntry().values().remove(po);

关于java - "orphanRemoval = true"删除操作时未删除子对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32111287/

相关文章:

java - System.out 中的参数

java - Intellij IDEA 代码覆盖率不起作用

java - 使用 JPA 避免日期重叠

java - JPA 中的多个唯一约束

java - PersistenceException - 当多个 @OneToMany 关系与同一实体时抛出 org.hibernate.exception.ConstraintViolationException

java - Android Studio,Java : Cannot change horizontal margin at run time (ConstraintSet. 左)

java - 是否可以使用 hbm2ddl 为某个数据库列生成默认值

hibernate - JPA 和 hibernate : one to one mapping causes three select queries

java - 引用JPA中的一个表

java - 使用 Apache poi 在 excel 中查找特定列中的最后一行 no