在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。