使用 Critera 或 QueryOver API 将一列连接到多个表
Posted
技术标签:
【中文标题】使用 Critera 或 QueryOver API 将一列连接到多个表【英文标题】:Joining one column to multiple tables using Critera or QueryOver API 【发布时间】:2015-10-29 14:42:00 【问题描述】:一条路线由航路点组成。一个航点可以存在于多条路线上。一条路线可以由多个销售员提供服务。
要获得推销员需要访问的 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”字段。
【问题讨论】:
子查询是要走的路。检查this或that或here 【参考方案1】:事实证明,我的 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")...
【讨论】:
以上是关于使用 Critera 或 QueryOver API 将一列连接到多个表的主要内容,如果未能解决你的问题,请参考以下文章
从 QueryOver(或者 Fluent NHibernate)中获取魔法字符串?
JPA 1.0是否有JPA流畅的API / Critera api?我正在使用OpenJPA