2
我有一个对象持有3集合。这些集合中的对象继承了相同的超类。休眠一对多集合删除
我使用SingleTable继承与@ForceDiscriminator。
该集合是单向的一对多。
当我清除其中一个集合时,另外两个将它们的外键链接松开到保持对象。
我在WebSphere 7(带有JPA2.0功能包)容器中使用Hibernate 3.5.3。
实体
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@Table(name="PLANUNG")
@DiscriminatorColumn(name="DISC", discriminatorType=DiscriminatorType.STRING)
@DiscriminatorValue("dummy")
@ForceDiscriminator
public abstract class Planung extends EntityBase {
@Column(name = "JAHR", nullable=false)
private int jahr;
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch=FetchType.EAGER)
@JoinColumn(name="PLANUNG_ID", referencedColumnName="id")
@OrderBy("id ASC")
private List<Werte> Werte;
[...]
@Entity
@DiscriminatorValue(PlanungA.NAME)
public class PlanungA extends Planung {
public static final String NAME = "PlanungA";
}
@Entity
@DiscriminatorValue(PlanungB.NAME)
public class PlanungB extends Planung {
public static final String NAME = "PlanungB";
}
@Entity
@DiscriminatorValue(PlanungC.NAME)
public class PlanungC extends Planung {
public static final String NAME = "PlanungC";
}
---
@Entity
@DiscriminatorValue(Base.NAME)
public class Base extends AbstractBase {
public static final String NAME = "Base";
@OrderBy("jahr ASC")
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name="BASE_ID", referencedColumnName="id")
private List<PlanungA> planungA;
@OrderBy("jahr ASC")
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name="BASE_ID", referencedColumnName="id")
private List<PlanungB> planungB;
@OrderBy("jahr ASC")
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name="BASE_ID", referencedColumnName="id")
private List<PlanungC> planungC;
[...]
应用程序代码
List list = base.getPlanungA();
list.clear();
问题
除了其他的语句Hibernate的问题,这个SQL:
update
PLANUNG
set
BASE_ID=null
where
BASE_ID=?
因此,所有集合(PlanungA,B,C)都不参考Base对象。
判别符丢失(例如AND DISC ='PlanungA')。
我已经尝试过
- 我已经升级到Hibernate 3.6.10.Final(只是尝试)。它没有解决这个问题。
- 全球范围内搜索...
任何帮助,指点我类似的问题等是极大的赞赏。
谢谢!
似乎是一个Hibernate的bug:https://hibernate.onjira.com/browse/HHH-1134 – overmeulen 2013-02-21 11:42:27
问题解决了!由于我没有10个声望,我无法在8小时内回答我自己的问题。 明天我会发布解决方案。 – 2013-02-21 13:20:15
您对每个外键使用了不同的列吗?这是我想到的第一个想法,但这不仅仅是一种解决方案,而是一种黑客攻击。 – overmeulen 2013-02-21 13:28:11