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

Join 使用Critera或QueryOver API将一列连接到多个表,join,nhibernate,criteria,queryover,Join,Nhibernate,Criteria,Queryover,路线由航路点组成。一个航路点可以存在于多条航路上。一条路线可以由多个销售人员提供服务 要获取销售人员需要访问的航路点,我可以使用以下简化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.Rou

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

要获取销售人员需要访问的航路点,我可以使用以下简化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或类似SQL


我尝试过各种方法,但我似乎无法将Waypoint连接到RouteWaypoint和RouteSalesMan。当我定义别名时,以及当我尝试将route.RouteId加入到它抱怨的任何内容时,NHibernate不会让我将字段关联多次。如果我没有指定字段,它会抱怨在航路点上找不到字段路由。

结果表明,我的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")...

子查询是一种方法。检查或