路线由航点组成。一个航点可以存在于多个路线上。路线可以由多个销售人员提供服务。
要获得销售员需要访问的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上找到“路径”字段。
答案 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")...