Я сталкиваюсь со следующей ситуацией.
Моя объектная модель выглядит следующим образом:
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_ID в таблице A_TO_C (который фактически является именем столбца id-столбца TAB_A). Он должен выбрать столбец listOfBl_.FK_A_ID, который является столбцом внешнего ключа, ссылающимся на столбец A_ID в TAB_A.
Теперь вопрос: я не прав или это SQL-генератор?