2010-02-25 54 views
3

我希望有人能幫助我找到答案。休眠:多對一使用公式

我正在使用遺留數據庫,我無法更改任何已存在的表,因爲其他應用程序依賴於它們。

我有三個主要的現有表格:A,B,C

A有一列引用B(多對一關係)。問題是它應該與C沒有關係,所以我創建了一個* -1映射BC。

Tables: A,B,C,BC (all have ID field) 
A-B many to one 
B-C many to one through BC 
Needed:A-C without altering A,B or C 

我不希望有B或BC,只是A和C的java實體,和A應該有一個現場交流

到目前爲止,我已經使用@Formula註釋無濟於事嘗試。

class A{ 
    @ManyToOne 
    @Formula(value="select BC.c from BC where BC.b = b") 
    private C c; 
} 

這將產生以下SQL:(?爲什麼公式完全忽略)

select this_.c_ID from A this_ 

因爲在表A中沒有列C_ID這顯然會失敗。

卸下@ManyToOne註解生產:

select (select BC.c from BC where BC.b = this_.b) as formula_0 from A this_ 

這將是完美的,除了Hibernate所期待一個二進制值(C類的序列化α)和拋出異常鑄造它接收到的整數時。

這個ID應該足夠延遲加載,但我如何告訴它做到這一點?任何使用@ManyToOne都會破壞公式。

如何在不改變A,B,C表或創建Java類B或BC的情況下實現A-C鏈接?

感謝任何信息, 丹

回答

1

聽起來似乎很喜歡這個bug,可惜沒修復準備使用註釋,看來你很有可能得到它與XML映射文件的工作這些類雖然。

+0

是的,你是對的,它似乎是同樣的問題。我真的很想保留註釋中的所有映射。 現在我已經添加了B和BC類,但是我可能會更改爲僅針對此類的xml映射,因爲它會更高效。 –

0

這應該在Hibernate 3.5.0-Beta-2 +中工作(HHH-4382已被修復)。