我有两个类,其中一个继承自另一个类。我试图使用NHibernate映射这些类,以便我可以尽可能高效地查询。 基类是不抽象,需要能够自己查询。基类看起来像这样。
public class Cat
{
public int Id { get; set; }
public string Name { get; set; }
}
派生类看起来像这样:
public class CustomerCat : Cat
{
public int CustomerId { get; set; }
}
派生的简单扩展了基础并为其添加了更多属性。我的映射文件看起来像这样
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="Foo"
namespace="Foo">
<class name="Cat" table="Cat">
<id name="Id" column="CatId" type="Int32" unsaved-value="0">
<generator class="native" />
</id>
<property name="Name" column="CatName" type="string" />
<joined-subclass name="CustomerCat" table="CustomerCat">
<key column="CatId" />
<property name="CustomerId " column="CustomerId" />
</joined-subclass>
</class>
</hibernate-mapping>
我遇到的问题是,如果我通过类似的东西查询Cats:
IList<Cat> cats = session.CreateCriteria<Cat>().List<Cat>();
生成的sql将通过join-subclass表保持连接。我可以查询我的基类而不参考查询中的任何派生类的表吗?
答案 0 :(得分:2)
我认为为了以你想要的方式工作(即,并不总是做左连接),你必须创建一个抽象基类。问题是所有的CustomerCats都是Cats,因此它必须加入到该表中以获取所有Cats(即Cats和CustomerCats)。
如果您决定创建一个抽象基类,请参阅here以获取不同选项的概述以及它们产生的SQL。