Hibernate 休眠条件和计数列
我试图返回一个实体,该实体的列具有另一个一对多关系表的计数。我想使用hibernate标准,而不是HQL来实现这一点Hibernate 休眠条件和计数列,hibernate,count,subquery,hibernate-criteria,Hibernate,Count,Subquery,Hibernate Criteria,我试图返回一个实体,该实体的列具有另一个一对多关系表的计数。我想使用hibernate标准,而不是HQL来实现这一点 select p.*, (select count(*) from child where child.parentid = p.id) as LEVELS from parent p 你可以通过某种投影来实现 请参见有关Hibernate投影的说明。您可能对子查询类中的sqlProjection方法感兴趣 List results = session.createCriter
select p.*, (select count(*) from child where child.parentid = p.id) as LEVELS
from parent p
你可以通过某种投影来实现 请参见有关Hibernate投影的说明。您可能对子查询类中的sqlProjection方法感兴趣
List results = session.createCriteria(Parent.class, "p")
.setProjection(Projections.projectionList()
.add(Projections.property("field1"))
.add(Projections.property("field2"))
.add(Projections.property("field3"))
.add(Projections.sqlProjection("select count(*) from child where child.parentid = p.id"), new String[] {"LEVELS"}, new Type[] {Hibernate.INTEGER})
).list();
定义一个对象字段映射,如下所示。然后,当您查询父对象时,每个对象都应该有一个名为children的类型为list的字段,您可以在该字段上调用size
做这件事很有用。不是很有活力,但它会起作用
@Basic
@Column(name = "LEVEL")
@Formula(value="(SELECT count(*) FROM BadgeLevels bl WHERE bl.badgeid = this_.id)")
public long getLevel() {
return level;
}
如果父实体还包含双向关联的子实体列表,则可以使用条件返回子实体计数,如下所示:
Criteria criteria = hibernateSessionHelper.getSessionFactory().getCurrentSession().createCriteria(Parent.class);
ProjectionList projList = Projections.projectionList();
projList.add(Projections.countDistinct("children.id"));
projList.add(Property.forName("field1").group());
projList.add(Property.forName("field2").group());
projList.add(Property.forName("field3").group());
.
.
.
criteria.createAlias("children", "children", CriteriaSpecification.LEFT_JOIN);
criteria.setProjection(projList);
List<Object[]> results = crit.list();
where子句应该是from吗?谢谢修复了语法错误,我将尝试一下,但无论如何都不能使用原始sql,而是以某种方式使用分离查询吗?棘手的部分似乎是,您的计数取决于另一个关系。如果使用Hibernate映射,然后,您可以映射子对象的列表,只需使用Java大小方法。有关关联方法,请参阅我的其他答案。原始项目为我提供了select*from select count*from BADGELVELS bl,其中bl.badgeid=b.id来自CISCO.BADGES this_uu,其中this_uu.ACTIVE=?在何处rownum如何从Parent.class返回剩余列的计数?我是否缺少投影?我正在返回一个家长列表,我不想返回该对象的所有join Child。我只需要父列的子列的计数。
Criteria criteria = hibernateSessionHelper.getSessionFactory().getCurrentSession().createCriteria(Parent.class);
ProjectionList projList = Projections.projectionList();
projList.add(Projections.countDistinct("children.id"));
projList.add(Property.forName("field1").group());
projList.add(Property.forName("field2").group());
projList.add(Property.forName("field3").group());
.
.
.
criteria.createAlias("children", "children", CriteriaSpecification.LEFT_JOIN);
criteria.setProjection(projList);
List<Object[]> results = crit.list();