NHibernate与鉴别器一对多

时间:2011-11-15 14:36:12

标签: nhibernate

我有一个由discriminator映射的每个类层次结构的表。它效果很好,但我不知道如何处理容器类。

情景是宠物包含猫,狗和猫,狗在一张桌子里。我发现了一个如下所示的休眠解决方案,归功于chris Polymorphic one-to-many。我如何在NHibernate中做同样的事情?尤其是围绕@Where(clause =“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
}

1 个答案:

答案 0 :(得分:0)

根据要求过滤宠物系列。在C#中,这看起来像:

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

或者将Cats集合作为IEnumerable<Cat>返回,并取消ToList()