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