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

时间:2015-10-29 14:42:00

标签: join nhibernate criteria queryover

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

要获得销售员需要访问的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上找到“路径”字段。

1 个答案:

答案 0 :(得分:0)

事实证明,我的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")...