2011-11-15 37 views
0

我有一個每個類層次結構由映射鑑別器的表。它工作得很好,但我不知道如何處理容器類。NHibernate與鑑別器一對多

情景是寵物包含貓,狗和貓,狗在一張桌子。我發現了一個如下的hibernate解決方案,歸功於chris Polymorphic one-to-many。我如何在NHibernate中做同樣的事情?尤其是圍繞@Where(條款=「dtype ='Dog'」)

@Entity 
@Inheritance(strategy=InheritanceType.SINGLE_TABLE) 
class Pet { ... } 

@Entity 
public class Cat extends Pet {} 

@Entity 
public class Dog extends Pet {} 

@Entity 
public class Owner { 
    @Id @GeneratedValue 
    long id 

    @OneToMany 
    @JoinColumn(name="owner_id", insertable=false, updatable=false) 
    List<Pet> pets 

    @OneToMany 
    @JoinColumn(name="owner_id", insertable=false, updatable=false) 
    @Where(clause="dtype='Dog'") 
    List<Dog> dogs 

    @OneToMany 
    @JoinColumn(name="owner_id", insertable=false, updatable=false) 
    @Where(clause="dtype='Cat'") 
    List<Cat> cats 
} 

回答

0

只是在請求時過濾Pets集合。在C#中,這將是這樣的:

public List<Cat> Cats 
{ 
    get { return Pets.OfType<Cat>().ToList(); } 
} 

還是回到了貓集合作爲IEnumerable<Cat>並留下關閉ToList()