我有这样的要求:
要求1)
select * from BigTable
1) Where BigTable.User.FullName = XYZ
2) Where BigTable.Network.Name = XYZ
用户和网络是由FK链接的单独表格。如上所述有两种类型的选项。这实际上用于搜索。
要求2)
1) Order By BigTable.User.FullName ASC/DESC
2) Order By BigTable.Network.Name ASC/DESC
加载搜索后,应根据用户喜欢的数据对任何一个选项进行排序。
我希望实现一个更精确的代码,我不必复制许多JoinQueryOver代码,只是为了处理加载作为当前实体加入的实体的各种场景;因此,我正在使用JoinAlias,以便通过整个代码执行实现标准化实现。请注意,如果可能的话,我不想依赖HQL。
出于某种原因,我无法将我的逻辑转发到NHibernate编码中。请参阅以下内容:
var Query = session.QueryOver<BigTable>();
User funny = null;
Query.JoinAlias(x => x.User, () => funny).Where(() => funny.Full_Name.IsInsensitiveLike("%" + SearchTextFilter + "%"));
return Query.OrderByAlias(() => funny.Full_Name).Desc
.Skip(skip)
.Take(take)
.List<MasterLicensee>();
我收到此错误:[QueryException:重复关联路径:用户]
知道我输错了什么或者什么? :)
修改
我的想法是将它们分开,以解决所涉及的许多可能情况。
意思是:
要求1)按用户的FullName搜索。
然后,
要求2)按网络名称排序。
根据这两项要求,我们可以选择:
使用代码编写将是乏味和丑陋的。所以我的想法是将它们分成几个部分。
混合使用不同的必需连接,例如:
select * from BigTable Where BigTable.User.FullName = XYZ Order By BigTable.Network.Name ASC/DESC
如何将其纳入NHibernate查询?请协助
答案 0 :(得分:0)
在回答你的主要问题时,我认为你的问题是,因为你没有像GertArnold所说的那样链接,你实际上是在两次创建相同的Alias。
JoinAlias
and OrderByAlias
命令映射到Criteria
的{{1}}命令,这意味着您将指定两次相同的别名。因此,我们会讨论您的问题here。
因此,尝试链接命令,以便您只指定一次别名,并查看是否可以解决问题。