我需要用ICriteria写类似的SQL:
表:
1级-- 2级-- 3级
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-criteria。
发布于 2011-04-04 22:05:39
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,但它会得到相同的结果。
https://stackoverflow.com/questions/5536309
复制相似问题