NHibernate QueryOver加入一个集合两次

本文关键字:一个 集合 两次 QueryOver NHibernate | 更新日期: 2023-09-27 18:16:52

我正在使用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排序,而不是按因此,这就是多个连接到同一对象的原因表格

运行此查询将产生以下异常:

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吗?(还有,有没有更好的方法来做这比使用两个连接?)

提前感谢。

NHibernate QueryOver加入一个集合两次

是的,这是我以前遇到过的限制。

我最近有一个类似的问题,想坚持使用QueryOver和自定义投影与一个Transformer。我能够通过做一个左外连接来解决,用例…然后…在外部表上使用else表达式,然后使用GROUP BY将结果合并回所需的单行,以便转换为DTO。但是,我认为这种方法只有在使用dto时才有用。