休眠标准和计数列

Mik*_*ynn 8 hibernate count subquery hibernate-criteria

我试图返回一个实体,其列具有另一个表的计数,该表是一对多关系.我想使用hibernate标准,而不是HQL.

select p.*, (select count(*) from child where child.parentid = p.id) as LEVELS
from parent p
Run Code Online (Sandbox Code Playgroud)

Ekc*_*erK 5

如果父实体还包含子项列表(双向关联),则可以使用条件返回子项计数,如下所示:

    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();
Run Code Online (Sandbox Code Playgroud)


Mik*_*ynn 4

做到这一点就可以了。不是很动态,但它会起作用。

    @Basic
    @Column(name = "LEVEL")
    @Formula(value="(SELECT count(*) FROM BadgeLevels bl WHERE bl.badgeid = this_.id)")
        public long getLevel() {
        return level;
    }
Run Code Online (Sandbox Code Playgroud)