gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 15:06:51 25 4
gpt4 key购买 nike

以下两个类(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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com