2012-02-21 29 views
1

我正面臨以下情況。用NHibernate,Bag和Enumerable.Any()生成SQL的錯誤?

我objectmodel如下:

EntityA --*> EntityB -> EntityC 

EntityA引用的EntityB列表。 EntityB引用單個EntityC

我的映射是:

<class name="EntityA" table="TAB_A" > 
    <id name="Id" column="A_ID" > 
     <generator class="native" /> 
    </id> 
    <version name="Version" column="VERSION" /> 
    <bag name="listOfB" cascade="save-update" table="A_TO_C" lazy="false" > 
     <key column="FK_A_ID" /> 

     <composite-element class="EntityB" > 
     <many-to-one name="refToC" class="EntityC" column="FK_C_ID" cascade="save-update" /> 
     </composite-element> 
    </bag> 
    </class> 

我離開了所有的額外屬性和東西。

我查詢數據庫:

var query = session.Query<EntityA>() 
        .Where(a=> a.listOfB.Any(b => b.refToC == anInstanceOfC)); 

// count all matches 
var count = query.ToFutureValue(t => t.Count()); 

好吧,這看起來不錯,我至今)。當我執行查詢時,出現錯誤,SQL語句失敗。生成的SQL包含以下子聲明:

select listOfB1_.A_ID 
from A_TO_C listOfB1_ 
where a0_.A_ID=listOfB1_.FK_A_ID 
and listOfB1_.FK_C_ID=? 

聲明預計,上表A_TO_C(實際上是TAB_A的id列的列名)列A_ID。它應該做的是選擇listOfBl_.FK_A_ID列,這是引用TAB_A的A_ID列的外鍵列。

現在的問題:我錯了還是SQL生成器?

+0

你有表A爲其他拖車也次級鍵或外鍵主鍵的設置,表A是主鍵 – MethodMan 2012-02-21 19:12:21

+0

其實我不在乎:D。但NHibernate爲TAB_A生成主鍵A_ID,爲TAB_C生成C_ID。外鍵在列FK_A_ID和FK_C_ID上定義。這符合我的預期。 – BaSche 2012-02-21 19:56:00

回答