0

ICriteriaで同様のSQLを作成する必要があります。

テーブル:

1Lvl-2Lvl-3Lvl

SQL:

SELECT * FROM 2Lvl
WHERE 2Lvl.1LvlFK in
(
    SELECT 1Lvl.Id

    FROM 3Lvl 

    JOIN 2Lvl ON 3Lvl.2LvlFK = 2Lvl.Id 

    JOIN 1Lvl ON 2Lvl.1LvlFK = 1Lvl.Id  

    WHERE 3Lvl.Id = 123
)

具体的な質問で申し訳ありませんが、Hibernateを使用したプロジェクトを従業員から継承したため、Hibernateの基準を理解できません。

4

1 に答える 1

0
var subQuery = DetachedCriteria.For<Lvl3>("lvl3")
     .CreateAlias("Lvl2", "sublvl2", JoinType.InnerJoin)
     .CreateAlias("Lvl1", "lvl1", JoinType.InnerJoin)
     .Add(Restrictions.EqProperty("sublvl2.Id", "lvl2.Id")
     .Add(Restrictions.Eq("lvl3.Id", 123)
     .SetProjection(Projections.Property("lvl1.Id"));

Session.CreateCriteria<Lvl2>("lvl2")
     .Add(Subqueries.PropertyIn("Lvl1.Id", subQuery));

トリックを行う必要があります。1Lvlなどは有効なC#識別子ではないため、エンティティが何と呼ばれるかについて仮定しました。また、各テーブルの主キー列はIdであると想定しました。また、これでは探している正確なSQLは生成されませんが、同じ結果が得られることに注意してください。

于 2011-04-04T14:05:38.687 に答える