我知道這裏有一些帖子,但他們大概一年沒有迴應。其實我們在PostgreSQL 8.4上使用Hibernate 4.2.1.Final。我們有兩個實體來說這樣Hibernate Polymorphism.EXPLICIT註解不起作用?
實體A(頂類層次結構)
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@Polymorphism(type = PolymorphismType.EXPLICIT)
public class A {
@Id
@GeneratedValue
private Long id;
public A() {
}
public A(Long id) {
super();
this.id = id;
}
// Setters, getteres, hashCode and equals
}
實體B(子類)
@Entity
public class B extends A{
String value;
public B(){
}
public B(String value) {
super();
this.value = value;
}
public B(Long id, String value) {
super(id);
this.value = value;
}
// Setters, getteres, hashCode and equals
}
正如你所看到的,一個實體都被註解PolymorphismType.EXPLICIT
但是當提取頂級類別時
ArrayList<A> lista = (ArrayList<A>) session.createCriteria(A.class).list();
我們還得到了String value
屬性的B子類。實際上,SQL語句包含left outer join B
。這仍然是第四版Hibernate中的錯誤,或者我做錯了什麼?
問候
是的,文件是非常混亂,應澄清。所以現在,問題是知道我們使用_table per subclass_而不是在同一個表中使用A和B(因爲真正的模式不是那麼簡單),所以有一種方法可以只提取一個實體而不需要獲取所有的數據和作曲手動創建A實例的響應?我的意思是,沒有'left outer join B'的'SELECT' SQL語句。 謝謝 – hespresati
你可以打破A和B之間的繼承關係嗎? – sharakan
我認爲我們不能。真正的傳統模式是像Conact這樣的樹,它擴展了聯繫人和擴展聯繫人的Person。還有另外一些實體從公司延伸出來,更多的實體從Person延伸到 – hespresati