2009-05-18 122 views
1

我有一個非常簡單的類層次結構,下面列出,每個子類具有@DiscriminatorValue枚舉類型,它工作得很好。Hibernate映射和繼承問題與@SecondaryTable

抽象類:

是AbstractNode(映射到節點表抽象類)

創建子類類:

FieldNode(簡單的類映射到節點表,以及,但是具有不同的@ DiscriminatorValue值)

SynonymNode(問題類,這個類也映射到節點表與不同@DiscriminatorValue值)

ALSO具有@SecondaryTable屬性,並且具有額外的列,如deletedDate,createdDate等每個映射到@SecondaryTable屬性中定義的表中的coumns。

林的問題是當我爲節點表做一個簡單的Hibernate查詢

我得到這樣的錯誤:

org.hibernate.exception.GenericJDBCException:無法執行查詢 ... 堆棧跟蹤 ... 產生的原因:值java.sql.SQLException:無效的列名

,在我的日誌中我可以看到:

的Hib ernate: 選擇 * 從 vocab_node 其中 下面(名稱)like'%'|| ? || '%'

INFO [NullableType.java:132]:無法從結果集中讀取列值:DELETED_DATE;無效的列名

我的猜測是,它發現一個行中的數據庫表,然後確定這是一個SynonymNode類類型(由@DiscriminatorValue列),然後嘗試填充類包括映射的額外列的表與@SecondaryTable。

我怎麼能告訴它,左加入@SecondaryTable,或完全排除它爲這個特定的查詢?

謝謝堆!這個問題正在殺死我!

進出口運行的Hibernate 3.2.1和Java 1.5

乾杯, 馬克

+0

我應該提到,到目前爲止,我的工作是在我的SQL中左鍵連接@SecondaryTable,以便至少返回空值並且映射仍然正確。 – Mark 2009-05-18 02:47:29

回答

2

我認爲,問題是,你必須指定哪些字段要映射到你的@SecondaryTable ...

在@Column批註集「表」屬性:@Column(name =「somecol」,表=「secondaryTable」)

Hibernate的抱怨,因爲它是在原來的表時尋找你的領域它應該在輔助表中尋找它們。