Hibernate children count criteria

只谈情不闲聊 提交于 2019-12-10 22:58:01

问题


I have parent/children relationship: newsItem 1-* comment.

How can I select a list of newsItems and also count of comments for each newsItem using one Criteria query?

I want to do something like this:

select news_item.*, count(comment.id) from news_item left join comment on comment.news_item_id = news_item.id group by news_item.id

The result should be the List of Object[2] { newsItem, int }.

Could this be accomplished with Criteria queries?

Thanks!


回答1:


Well, I've found a solution. Hope it helps someone:

Criteria criteria = session.createCriteria(NewsItem.class);

criteria.createAlias(NewsItem.COMMENTS, NewsItem.COMMENTS, Criteria.LEFT_JOIN);

ProjectionList properties = Projections.projectionList();
properties.add(Projections.groupProperty(NewsItem.ID).as(NewsItem.ID));
properties.add(Projections.property(NewsItem.DATE).as(NewsItem.DATE));
properties.add(Projections.property(NewsItem.NAME).as(NewsItem.NAME));
properties.add(Projections.property(NewsItem.PREVIEW).as(NewsItem.PREVIEW));
properties.add(Projections.property(NewsItem.IMAGE).as(NewsItem.IMAGE));
properties.add(Projections.count(NewsItem.COMMENTS + "." + Comment.ID).as(NewsItem.COMMENTS_COUNT));
criteria.setProjection(properties);
criteria.setResultTransformer(Transformers.aliasToBean(NewsItem.class));

You should also add a virtual property COMMENTS_COUNT (Long) to NewsItem class.




回答2:


You can use something like this:

Criteria criteria = session.createCriteria(NewsItem.class,"newItem")
         .createAlias(NewsItem.COMMENTS, "comments", Criteria.LEFT_JOIN)
         .setProjection(Projections.projectionList().add(
            Projections.alias(Projections.count("comments.id"), "commentsCount")).add(
            Projections.alias(Projections.groupProperty("newItem.id"), "newItem")))
        .setResultTransformer(Transformers.aliasToBean(NewItemCommentsGroupBy.class));

Make sure that the NewItemCommentsGroupBy class is something like this:

class NewItemCommentsGroupBy{
    long commentsCount;
    NewsItem newsItem;
}


来源:https://stackoverflow.com/questions/4255382/hibernate-children-count-criteria

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!