0

以下のようなSQLクエリがあります。

SELECT * 
FROM   USER R 
       INNER JOIN userdepartment C 
               ON R.id = C.userid 
       INNER JOIN userdepartment K 
               ON C.userid = K.userid 
WHERE  C.departmentid = 155 
       AND K.departmentid = 157 

ユーザーと部門には多対多の関係があり、関係を維持するために UserDepartment テーブルがあります。ここで、ID 155 と 177 の両方の部門を持つユーザーのみを取得したいと考えています。上記のクエリは、私が望むことを行います。

ここで、上記のクエリを Nhibernate クエリに変換したいと思います。Criteria を使用してクエリを生成しています。私は次のことを試しました:

    var criteria =    Session.CreateCriteria<User>();
    var subcriteria = criteria
                      .CreateCriteria("UserDepartments","a", JoinType.InnerJoin);
    subcriteria = subcriteria
                       .CreateCriteria("UserDepartments", "b", JoinType.InnerJoin);
    var conjunction = Restrictions.Conjunction();
    conjunction.Add(Restrictions.Eq("DepartmentId", 155));
    conjunction.Add(Restrictions.Eq("DepartmentId", 177));
    subCriteria.Add(conjunction);

しかし、これはうまくいきません。同じことで私を助けてください。よろしくお願いします。

4

1 に答える 1

0

userdepartment から userdepartment への関係が設定の userdepartment に存在しないため、クエリが機能していません。userdepartment に userdepartment の子を作成する必要があります。その後、その子にアクセスできます。これは、nhibernate が構成で定義されたリレーションをトラバースするために使用するためです。

于 2013-07-11T15:06:03.387 に答える