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吗?(还有,有没有更好的方法来做这比使用两个连接?)
提前感谢。
是的,这是我以前遇到过的限制。
我最近有一个类似的问题,想坚持使用QueryOver和自定义投影与一个Transformer。我能够通过做一个左外连接来解决,用例…然后…在外部表上使用else表达式,然后使用GROUP BY将结果合并回所需的单行,以便转换为DTO。但是,我认为这种方法只有在使用dto时才有用。