Рассмотрим следующие таблицы:
Client(Id bigint, Name varchar(50))
Employee(Id bigint, Name varchar(50), ClientId bigint)
которые отображаются следующим образом:
<class name="Client" table="`Client`">
<id name="Id" column="`Id`" type="long">
<generator class="native" />
</id>
<property name="Name" column="`Name`" />
<bag name="Employees" cascade="all" inverse="true" >
<key column="`ClientId`" />
<one-to-many class="Employee" />
</bag>
</class>
<class name="Employee" table="`Employee`">
<id name="Id" column="`Id`" type="long">
<generator class="native" />
</id>
<property name="Name" column="`Name`" />
<many-to-one name="Client" cascade="all" column="`ClientId`" />
</class>
Если я получаю клиента, я также получаю коллекцию сотрудников, где Employee.Client = Client.Id. Здорово.
Теперь подумайте об этом:
Client(Id bigint, Name varchar(50), AlternativeId int)
Employee(Id bigint, Name varchar(50), ClientId bigint, AlternativeClientId int)
Я хочу вернуть клиента с коллекцией сотрудников, где Employee.AlternativeClientId = Client.AlternativeId.
Я бы предположил, что ключевой узел теперь будет читать:
<key column="`AlternativeClientId`"/>
Но помимо этого я в тупике. Существуют фильтры, которые можно применять к коллекциям, но набор сотрудников во второй версии может не быть подмножеством сотрудников в первой версии, поэтому я не думаю, что это путь вперед. Я пытался, но это казалось тупиком. Есть ли способ указать запрос, но не только для сотрудников, у которых ClientId = Client.Id?
(Для «почему»: это связано с тем, как разные системы по-разному представляют данные.)