我希望有人能幫助我找到答案。休眠:多對一使用公式
我正在使用遺留數據庫,我無法更改任何已存在的表,因爲其他應用程序依賴於它們。
我有三個主要的現有表格: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鏈接?
感謝任何信息, 丹
是的,你是對的,它似乎是同樣的問題。我真的很想保留註釋中的所有映射。 現在我已經添加了B和BC類,但是我可能會更改爲僅針對此類的xml映射,因爲它會更高效。 –