2009-11-03 42 views
0

我有兩個類中的一個從另一個繼承。我試圖使用NHibernate映射這些類,以便我可以儘可能有效地查詢這兩個類。 基類是而不是抽象,需要能夠被自己查詢。基類看起來像這樣。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> 

的具有1M的問題是,如果我通過一些查詢貓這樣的:

IList<Cat> cats = session.CreateCriteria<Cat>().List<Cat>(); 

將產生向左連接子類表連接到SQL。我可以查詢我的基類沒有任何引用到查詢中的任何派生類的表?

回答

2

我認爲,爲了以您希望的方式工作(即,不總是進行左連接),您必須創建抽象基類。問題是,所有的客戶貓都是貓,所以它必須加入到該表以獲得所有的貓(即貓和客戶貓)。

如果您決定創建抽象基類,請參閱here以瞭解不同選項的概述以及它們導致的SQL。