0

我试图编写一个同时有效地加入和限制的 NHibernate 标准。我的数据库看起来像这样......

案例 ---> CustomerProducts <--- 客户案例 ---> CaseStatuses

每个案例都与一个客户产品相关联(一个产品的多个案例)。

每个客户有多个客户产品(一个客户有多个客户产品)。

每个案例还有一个案例状态(一个案例状态到多个案例)。

这已使用 XML 文件进行映射,案例和客户(通过客户产品)之间的多对多解决方案已通过 CustomerProduct 映射中的 Sets<> 解决,这意味着 CustomerProduct 实体具有集合:

顾客

案例

然后我创建一个键入“案例”的标准。我需要申请的标准是......

  1. 状态 IN [各种状态代码]。这已经实现了......

    criteria.Add(Restrictions.In("CaseStatus.CaseStatusId", statuses));

  2. 现在我只需要为特定客户 ID 选择案例。我试过了...

    criteria.Add("CustomerProduct.Customer.CustomerId", customerId);

这不起作用,NHibernate 告诉我它无法解析到 CustomerProduct.Customer.CustomerId 的映射。

Case 具有 CustomerProduct 对象的属性。

CustomerProduct 具有 Customer 对象的属性。

客户具有 CustomerId 的属性。

任何想法为什么它不起作用?

谢谢。

4

1 回答 1

4

我认为您需要为 CustomerProduct.Customer 创建一个别名:

criteria.CreateAlias("CustomerProduct", "customerProduct");
criteria.CreateAlias("customerProduct.Customer", "customer");
criteria.Add(Restrictions.Eq("customer.CustomerId", customerId));

我很惊讶 IN 限制在没有别名的情况下起作用。这是一篇关于使用 Criteria API 执行连接查询的好文章。

于 2010-01-27T16:02:37.953 回答