休眠分组计数

时间:2018-08-21 21:15:57

标签: java hibernate jpa jpql

在SQL中,我可以执行以下操作:

select m.*,sq.c from message m inner join (
  select max(m.id) as id, count(m.id) as c
    from message m group by m.externalid
) sq on sq.id=m.id;

即对邮件表进行分组,按每个组的max(id)选择,然后返回所有列以及一个计数。

我可以在Hibernate(最好是JPQL)中返回Messages对象和计数值吗?

或者最好的选择是什么-一个查询以获取消息,然后单独计数以进行计数,看来可能会出错。但是,如果可以避免,我不愿意在列表上拖网。

编辑:

这与我从注释中的链接到等效的Apple示例很近:

select new com.example.MessageStat(m, count(m)) from message as m group by m.externalid

但是它给出了这个错误:

ERROR [2018-08-22 11:35:54,600] org.hibernate.engine.jdbc.spi.SqlExceptionHelper: ERROR: column "message0_.id" must appear in the GROUP BY clause or be used in an aggregate function

在添加内部联接之前我曾使用过SQL,但是我无法为此找到等效的JPQL。

0 个答案:

没有答案