Как насчет этого sql запроса?
SELECT * FROM Application app
JOIN
(SELECT * FROM ApplicationWorkFlow aflo WHERE aflo.step = @step) AS aflo
WHERE aflo.application_id = app.id
Упрощенный запрос с использованием критериев
var applications =
Session.CreateCriteria<Application>()
.CreateAlias("ApplicationWorkFlow", "appflo", JoinType.LeftOuterJoin)
.Add(Restrictions.Eq("appflo.Step", step))
.List<Application>();
Соответствующий критерий запроса с использованием отдельных критериев
var detached = DetachedCriteria.For<ApplicationWorkFlow>()
.SetProjection(Projections.Id())
.Add(Restrictions.Eq("Step", step));
var applications =
Session.CreateCriteria<Application>()
.CreateAlias("ApplicationWorkFlow", "appflo", JoinType.LeftOuterJoin)
.Add(Subqueries.PropertyIn("appflo.Id", detachedCriteria))
.List<Application>();
Может кто-нибудь сказать мне, если два вышеуказанных запроса совпадают? Они генерируют тот же sql в моем случае. Если они одинаковы, почему следует использовать DetachedCriteria?