【问题标题】:Path Expected for Join! Nhibernate Error期望加入的路径!休眠错误
【发布时间】:2011-08-11 05:01:54
【问题描述】:

我尝试加入并不断收到此错误

连接的预期路径! [选择 t.CourseId FROM Task as t INNER JOIN 课程为 c,CoursePermissions 为 cp WHERE (t.CourseId = 1)]

我有

const string query = "SELECT t.CourseId FROM  Task as t INNER JOIN Courses as c, CoursePermissions as cp WHERE (t.CourseId = 1)";

var a = session.CreateQuery(query);

我正在努力实现的我的 Sql

SELECT     dbo.Tasks.CourseId
FROM         dbo.Tasks INNER JOIN
                      dbo.Courses ON dbo.Tasks.CourseId = dbo.Courses.CourseId INNER JOIN
                      dbo.CoursePermissions ON dbo.Courses.CourseId = dbo.CoursePermissions.CourseId
WHERE     (dbo.Tasks.CourseId = 1)

我正在使用 nhibernate 3.1 和流利的 nhibernate 1.2

【问题讨论】:

    标签: nhibernate fluent-nhibernate


    【解决方案1】:

    这意味着您在 HQL 中使用内部联接的工作方式与在 SQL 中使用它略有不同。在 HQL 中,您通过提供“路径”来连接表,这基本上是您的类的引用属性。

    所以不是

    SELECT t.CourseId FROM Task as t INNER JOIN Courses as c ...
    

    你需要写

    // c.Taks is the IList property in your Courses class
    SELECT t.CourseId FROM Courses as c INNER JOIN c.Tasks as t ...
    

    【讨论】:

    • 如果您在任务表上没有外键,这是否有效?
    【解决方案2】:

    虽然 Florian Lim 提出了一个很好的解决方案,但就我而言,我没有针对课程任务的 IList。我通过Theta-Style Joins(实际上是Cartesian product)实现了这一点,提供了可以根据需要过滤(在where子句中)的所有可能组合。

    【讨论】:

      猜你喜欢
      • 2018-11-12
      • 2013-04-27
      • 2020-05-02
      • 1970-01-01
      • 1970-01-01
      • 2016-03-15
      • 2011-04-13
      • 1970-01-01
      相关资源
      最近更新 更多