加入的路径预计! Nhibernate错误

时间:2011-04-22 20:23:13

标签: nhibernate fluent-nhibernate

我尝试加入,但我一直收到此错误

  

加入的路径! [选择   t.CourseId FROM Task as 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

2 个答案:

答案 0 :(得分:16)

这意味着在HQL中使用内部联接与在SQL中使用它有点不同。在HQL中,您通过提供“path”来加入表,该路径基本上是您类的引用属性。

所以而不是

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 ...

答案 1 :(得分:0)

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