我面临以下情况。
我的对象模型如下:
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上的列A_ID(实际上是TAB_A的id列的列名)。它应该做的是选择列listOfBl_.FK_A_ID,它是引用TAB_A的A_ID列的外键列。
现在的问题是:我错了还是SQL生成器?
答案 0 :(得分:2)
实际上这是一个错误。
请参阅another thread on stackoverflow,
nhibernate问题跟踪器中的