使用 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

NHibernate 3.0:没有使用QueryOver的FirstOrDefault()?

在 QueryOver 中

Queryover 的动态 Where 条件

使用 queryover 加入 2 个表