2011-04-01 82 views
0

我有這樣的情況,我有這樣的關係:休眠映射一個對象沒有關係

一個人有一個或多個地址。 客戶擁有一個或多個地址。

人員,客戶和地址是單獨的表格。

我曾經用@OneToMany關係做到這一點。 這是給我的問題,因爲我們的Flex客戶端發送我在客戶端創建的對象,並且必須在數據庫中創建。

如果客戶端向我發送一個人和客戶對同一地址的引用,hibernate會創建兩個地址對象,因爲這兩個地址對象不是相同的java對象(不同的指針)。

這是由BlazeDS和Dozer引起的一個問題,它會在發送到服務器時創建新的對象。

所以我想要的是沒有關係的人和客戶對象中的地址ID,所以hibernate不會創建對象。但是當我讀取一個人對象時,我想根據存儲的地址ID填充一個臨時地址對象。

有誰知道這是否可能?

回答

0

這裏有兩個問題:

  • 數據的延遲加載和
  • 實體解析/客戶端

有可用來幫助框架上的一個實體的一個規範的實例,但問題還沒有一個很好的通用解決方案。

dpHibernate將有助於數據的延遲加載 - 即:

,當我讀到一個人的對象,我想填補基於存儲的地址ID的瞬態地址對象

不幸的是,在dpHibernate的多個調用中還不支持實體解析。即 - 。如果呼叫在服務器調用中的兩個位置(如返回相同的對象,在這兩個Customer id:1Customer id:2相同Address實體,那麼你就在這兩個客戶對象接收的Address單個實例

然而,如果數據被加載了獨立的呼叫,您會收到兩個實例Address,這是一個issue被提名爲V3落實。

相信Cairngorm Integration library試圖解決這個問題,但是維基表明,它是LCDS只有你可以調查用BlazeDS實現這個功能的必要條件,我沒有使用過這個庫,所以不能說它能夠很好地解決你的問題問題。

+0

謝謝,我將看看dpHibernate庫。我們嘗試了Gilead,因爲這看起來很有希望,但是我們遇到了一個錯誤,不幸的是沒有人在論壇上做出迴應。 – 2011-04-18 14:07:33