使用 Critera 或 QueryOver API 将一列连接到多个表

Joining one column to multiple tables using Critera or QueryOver API

一条路线由Waypoints组成。一个 Waypoint 可以存在于多条路线上。一条路线可以由多个销售员提供服务。

为了获得Waypoints一个销售员需要访问,我可以使用这个(简化)SQL:

  SELECT WP.*
  FROM Waypoint WP
  JOIN RouteWaypoint RWP
    ON RWP.RouteId = WP.RouteId
  JOIN Route R
    ON RWP.RouteId = R.RouteId
  JOIN RouteSalesMan RMS
      ON RMS.RouteId = R.RouteId
  WHERE RMS.SalesManId = 5
  AND R.Status = 1 -- Only active routes

如何在 NHibernate 中使用 Criteria 或 QueryOver API 生成这个(或类似的)SQL?

我尝试了各种方法,但我似乎无法将 Waypoint 加入 RouteWaypoint 和 RouteSalesMan。当我定义别名时,NHibernate 不允许我多次关联一个字段,当我尝试将 route.RouteId 加入任何东西时,它会抱怨它不是关联。如果我不指定该字段,它会抱怨无法在 Waypoint 上找到字段 "Route"。

事实证明,我的 QueryOver/Criteria 调用结构没有任何问题。 Fluent Nhibernate 映射没有正确生成的问题

复合 ID 创建为:

   CompositeId().KeyProperty(x => x.SalesManId, "SalesManId")
                ... // Details elided;
   References(x => x.SalesMan).Column("SalesManId);

而不是

   CompositeId().KeyReference(x => x.SalesManId, "SalesManId")...