Как написать критерии гибернации для конкретного SQL? - PullRequest
0 голосов
/ 04 апреля 2011

Мне нужно написать аналогичный SQL по ICriteria:

Таблицы:

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
)

IПрошу прощения за столь конкретный вопрос, но я унаследовал проект с Hibernate от instanceloyee и до сих пор не могу понять критерии hibernate.

1 Ответ

0 голосов
/ 04 апреля 2011
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, который вы ищете, но даст тот же результат.

...