我的应用程序中有一个流畅的nhibernate配置。运行最新的两个。我试图创建一个条件语句来拉回连接的子类层次结构中的特定类。这是我的继承结构的一个例子:
管理员是员工(管理员:员工,员工:人员)
我想要的是员工而不是管理员,但由于管理员是员工,他们会回来查询。我没有使用鉴别器列。有没有办法使用Criteria API来实现这一目标?
提前致谢。
请求的架构(仅作为示例):
人员表:Id,姓名
员工表:PersonId,EmployeeNumber
管理员:PersonId,AdminNumber
NHibernate正确地解决了这些问题。除了这种特定类型的查询外,其他所有工作都有效。
答案 0 :(得分:0)
似乎Criteria不支持该功能。我能够通过在查询中添加SQL限制来过滤掉子类结果来解决问题。
criteria.Add(
Expression.SQL("{alias}.MyPrimaryKey NOT IN (SELECT MyPrimaryKey FROM Admin)"));
这实质上排除了Employee SQL查询的结果,其中Employee存在于Admin表中,因此只返回非Admin的Employees。
我最初尝试通过Criteria单独查询Admin表以获取ID列表,然后使用NOT IN Criteria语句Restrictions.Not(Restrictions.In())
将其输入到Employee查询中,但SQL Server将参数数量限制为2100并且打击如果您要排除的ID集合有超过2100项。