这个HQL语句,当执行这将产生以下结果:如何将此HQL转换为DetachedCriteria?
select t, count(s) from Submission s right join s.Topics as t GROUP BY t.Id
result[0]
[0] topic_id, topic_name, ...
[1] 10
result[1]
[0] topic_id, topic_name, ...
[1] 12
.
result[n]
[0] topic_id, topic_name, ...
[1] 19
将这个DetachedCriteria API产生几乎相同的结果,但没有加载主题
ProjectionList PrjList = Projections.ProjectionList();
PrjList.Add(Projections.GroupProperty("Topics"), "t");
PrjList.Add(Projections.Count("Id"));
DetachedCriteria Filter = DetachedCriteria.For<Submission>();
Filter.CreateCriteria("Topics", "t", JoinType.RightOuterJoin);
Filter.SetProjection(PrjList);
result[0]
[0] null
[1] 10
result[1]
[0] null
[1] 12
.
result[n]
[0] null
[1] 19
出于某种原因,NHibernate的拒绝创建主题对象为结果集,但它为HQL查询。这是为什么?
您试图GroupProperty类,但不是属性。我担心你应该把你在主题中的每个属性分组到ProjectionList中。在这种情况下,我会做一个方法扩展,将调用类的每个属性添加到分组。 – Genius 2011-02-13 13:25:25
NHibernate,使用HQL查询,能够做我在这里尝试的。我只是想找出使用Criteria API做同样事情的方法。然而,你提出的建议将需要我希望避免的转变。 – Roman 2011-02-13 13:40:52