在NHibernate中通过鉴别器进行查询

Tyl*_*eat 5 c# nhibernate

我做了一些搜索,并没有发现任何东西.是否可以创建一个Hibernate查询以基于鉴别器返回一组对象?

我有一个AbstractUser类,它由具体类UserTypeA和UserTypeB扩展.我正在使用table-per-hierarchy模型在NHibernate中映射我的类,因此UserTypeA和UserTypeB都存储在具有不同鉴别器值的同一个表中.这是我的鉴别器映射属性:

<discriminator column="Type" type="string"/>
Run Code Online (Sandbox Code Playgroud)

我的表中有一列包含用户类型的名称.我想知道是否可以使用它运行NHibernate查询.

我试过这个:

public IList<DomainBase> FindByType(string typeName, Type type)
{
    string query = "from " + type.Name + " k where k.Type = " + typeName;
    return Session.CreateQuery(query).List<DomainBase>();
}
Run Code Online (Sandbox Code Playgroud)

但由于Type实际上不是该类的属性,只是表中的一列,这显然不起作用.除非有一种方法可以将属性用作鉴别器,否则为此目的提供属性和鉴别器似乎是多余的?

Die*_*hon 6

实际上,这在http://www.nhibernate.info/doc/nh/en/index.html#queryhql-where中有详细记载:

同样,在class 多态持久性的情况下,特殊属性访问实例的鉴别器值.嵌入在where子句中的.Net类名将被转换为其鉴别器值.

 from Eg.Cat cat where cat.class = Eg.DomesticCat
Run Code Online (Sandbox Code Playgroud)

您还可以将System.Type实例作为参数传递.