Я работаю над устаревшей базой данных, которая довольно сложна.
Таблица клиенты делятся с поставщиками, и те, кто создал эту структуру, использовали флаг для идентификации клиентов.Так как меня интересует только работа с записями, определенными как клиенты, я добавил в свое сопоставление условие where:
<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="MyAssembly" namespace="MyAssembly.Domain">
<class name="Customer" table="ANSADID" mutable="false" where="ANFCLI = 'Y'">
<composite-id>
<key-property name="CustomerCode" column="ANCOCO" type="String" length="10"></key-property>
<key-property name="Company" column="ANCOSO" type ="String" length="5"></key-property>
</composite-id>
<property name="Name" column="ANINCO" type="String" length="100"></property>
</class>
</hibernate-mapping>
Как видите, я предварительно отфильтровал всех своих клиентов с помощью этого предложения: ANFCLI = 'Y'
Все отлично работает, если я опрашиваю клиентов (используется условие where):
var customers = session.QueryOver<Domain.Customer>()
.Where(t => t.Company == "ABC01")
.List();
Но если я опрашиваю таблицу заказов - где у меня связь «многие-к-одному»:
<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="MyAssembly" namespace="MyAssembly.Domain">
<class name="Order" table="OCSAORH" mutable="false" where="OCHAMND = 0">
<composite-id>
<key-property name="Number" column="OCHORDN" type="String" length="10"></key-property>
<key-property name="Ver" column="OCHAMND" type="Int32"></key-property>
<key-property name="Company" column="OCHCOSC" type="String" length="5"></key-property>
</composite-id>
<many-to-one name="Customer" class="Customer" lazy="proxy" fetch="join">
<column name="OCHCLII" not-null="true"/>
<column name="OCHCOSC" not-null="true"/>
</many-to-one>
</class>
</hibernate-mapping>
фильтр для клиентов сущностей потерян.
Я где-то читал, что предложение where не работает для ассоциации, и вы должны использовать предложение where для коллекции (bag, set,и т. д.), но как я могу сделать это со многими к одному?
Спасибо за помощь.