以下两个类(CD和DVD)彼此无关。每个都有不同的表。但是它们都有像Address这样的子类。
在保存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>();
}
// CD class
@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;
}
答案 0 :(得分:0)
要删除AddressPO
,您必须将其与与当前Session
关联的DVDPO和CDPO对象取消关联。
PersistentObject po = ...;
DVDPO dvdpo = ...;
CDPO cdpo = ...;
dvdpo.getAuditEntry().values().remove(po);
cdpo.getAuditEntry().values().remove(po);