Я пишу запрос для сортируемой сетки с использованием этого QueryOver:
IQueryOver<Order, Order> query = session.QueryOver(() => _OrderAlias);
query.Left.JoinQueryOver(() => _OrderAlias.Employees, () => _OrderEmployeeAssigneeAlias,
() => _OrderEmployeeAssigneeAlias.OrderEmployeeType == OrderEmployeeType.Assignee);
query.Left.JoinQueryOver(() => _OrderAlias.Employees, () => _OrderEmployeeSalespersonAlias,
() => _OrderEmployeeSalespersonAlias.OrderEmployeeType == OrderEmployeeType.SalesPerson);
query.OrderBy(() => _OrderEmployeeSalespersonAlias.LastName).Desc;
Условно, запрос будет построен для сортировки по Assignee, а не по Salesperson, поэтому это является причиной нескольких объединенийк той же таблице.
Выполнение этого запроса приводит к следующему исключению:
NHibernate.QueryException: duplicate association path: Employees --->
System.ArgumentException: An item with the same key has already been
added.
at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue
value, Boolean add)
at NHibernate.Util.LinkedHashMap`2.Add(TKey key, TValue value)
at
NHibernate.Loader.Criteria.CriteriaQueryTranslator.CreateAssociationPathCri teriaMap()
Я видел сообщения о том, как делать это с HQL, и некоторые из них утверждают, что в настоящее время это не поддерживается в Criteria API.
Это правильно?Является ли HQL единственным способом присоединиться к коллекции дважды?
Могу ли я сделать это с помощью QueryOver?(Кроме того, есть ли лучший способ сделать это, чем использование двух объединений?)
Заранее спасибо.