2009-10-05 38 views
0

我有兩個映射到NHibernate中的類:Dragon及其子類FierceDragon,有幾個FierceDragon存儲在一個名爲Dragons的表中。當我運行一個HQL查詢一樣from Dragon...我回去每行有兩個目的:預期FierceDragon和普通Dragon那是FierceDragon副本(只要是可能的;當然它缺乏FierceDragon的額外FerocityTimeSinceLastMeal屬性)。特別是,他們的ID是相同的。當我做from FierceDragon我只得到FierceDragon s,沒有額外的副本,但這對我來說一般不起作用。NHibernate查詢返回目標對象的多個副本

爲什麼會發生這種情況,我該如何預防它?

+0

你能發佈你的精確查詢嗎? – KLE 2009-10-05 16:14:30

+0

和映射? – Paco 2009-10-05 19:21:19

回答

0

神祕感解決了;我以爲我只映射FierceDragon,但不,我也映射Dragon,都到表Dragons。不知道爲什麼NH在這種情況下做了特定的事情,但顯然的解決辦法是,你知道,不是將單獨的類映射到同一個表。或者如果你這樣做,至少讓NH以某種方式區分數據庫中的兩者。

1

如果您正確地創建了映射,那就不會造成問題。 使用NHibernate將類層次結構映射到數據庫有三種不同的方法。

退房thisthis文章。

您可以將Dragon和FierceDragon都映射到同一個表中,但在這種情況下,您的表應該有一些可爲空的列來存儲FierceDragon的其他屬性。既然你在談論一個表,我想你想使用'按類表層次結構'映射策略?

+0

不,我正在使用'映射兩個類而不知道它'的策略。當我發佈了對龍的查詢時,NH觀察到Dragon和它的子類FierceDragon被映射,並且發佈了兩條選擇語句,每條語句都很幸福地不知道它們共享了一張表。 – 2009-10-06 15:24:30