2009-06-06 122 views
1

我的對象模型代表播客供稿,包含頻道數據和供稿項目(單個播客)。該結構如下:[NHibernate]如何將多個對象類型映射到一個表中?

PodcastFeed 
    ChannelData // Property on PodcastFeed 
     ITunesChannelData // Property on ChannelData 
    FeedItems // Property on PodcastFeed; collection of PodcastFeedItems 

PodcastFeedItem 
    ITunesItemData // Property on PodcastFeedItem 

在我的數據庫,在PodcastFeed,ChannelData和ITunesChannelData領域都存儲在一個表;同樣,PodcastFeedItem和ITunesItemData上的字段都存儲在一個表中。從PodcastFeed到PodcastFeedItem有一對多的關係。以這種方式存儲它們的原因是因爲在不同對象類型之間存在一對一映射(例如,ChannelData對於每個播客訂閱源都是唯一的)。

我可以將PodcastFeed映射到PodcastFeedItem,但我無法完成的是如何在組成PodcastFeed的不同類中對「Feeds」表中的數據進行「分區」。我已經成功地將Feeds表中的NHibernate映射創建爲這些類型,但是當我訪問PodcastFeed對象時,ChannelData屬性爲null。大概這是因爲NHibernate不知道如上所述創建層次結構。我試過我的映射文件中沒有成功的以下行(NHibernate嘗試從表中不存在的「ChannelData」列中加載數據)。

<property name="ChannelData" type="ChannelData" /> 

我需要在NHibernate中創建一個用戶類型來啓用它,還是我缺少一些內置的技巧?

回答

2

來解決,這是使用component mapping的方式。 <component />映射元素將允許在<class />級別提供儘可能多的映射類型,從而允許複雜的場景。

0

你在找什麼是TPH,按層次結構映射。這是您將數據庫中的單個表映射到對象層次結構的地方,通過某種鍵區分。

下列文件應è有所幫助: https://www.hibernate.org/hib_docs/nhibernate/html/inheritance.html

+0

我的「圖表」沒有描述一個對象繼承層次結構,它描述了一個包含其他對象成員的對象(因此是「Property on ...」註釋)。 雖然這個鏈接很有幫助;我實際上是在組件映射之後,碰巧是上一章。 – alastairs 2009-06-07 00:59:17

+0

啊,我的歉意......我不知道那個耀眼的「財產」評論到處都是:P – jrista 2009-06-07 01:52:40

相關問題