2011-05-05 43 views
2

是否可以在運行時使用Eclipselink更改實體表映射? 我有一個用註釋定義的實體 - 視圖映射。現在我有業務需求:「如果這些視圖是空的,請嘗試基礎表」。因此我必須從視圖切換到底層表。運行時使用Eclipselink交換實體表映射

該視圖只是在表上有一些限制的選擇。

回答

2

您何時需要檢查視圖是否爲空?

如果可以在啓動時完成一次,則可以將此檢查放在SessionCustomizer中並更改ClassDescriptor的表。

如果您在每次查詢時都需要這樣做,那麼這更奇怪。你可以定義一個MappedSuperclass和兩個子類,一個映射到視圖,一個映射到表,然後決定在你的應用程序中使用哪個。

你也可以定義另一個視圖,給你你想要的結果。

可以在運行時從Session中獲取ClassDescriptor並對其進行更改,但這通常是一個壞主意,因爲其他客戶端/線程可能同時使用描述符/會話。

或者只是總是映射到表格,並篩選查詢中的相關內容(或其他連接條件)而不是使用視圖。

+0

非常有幫助的回答,謝謝。我會嘗試MappedSuperclass方法,這應該適合我。 – Soccertrash 2011-06-12 11:08:04