Hibernate Subquery + Inner Join

Boa noite!

Preciso buscar as últimas mensagens de cada pessoa em um banco de dados.

A query que uso direto no banco é essa, que funciona beleza:

SELECT * FROM mensagem INNER JOIN (SELECT Msg_IdPessoa AS id, MAX(Msg_Data) AS maxData FROM mensagem GROUP BY Msg_IdPessoa) AS sub ON mensagem.Msg_IdPessoa = sub.id AND mensagem.Msg_Data = sub.maxData

Com isso, tentei fazer a consulta com Criteria e Projections do Hibernate:

[code]Criteria criteria = sessionFactory.getCurrentSession().createCriteria(Mensagem.class, “mensagem”)
.setProjection( Projections.projectionList()

	        .add(Projections.property("mensagem.idPessoa"),"idPessoa")
	        .add(Projections.property("mensagem.data"),"data")
	        .add(Projections.property("mensagem.texto"),"texto")
	        .add(Projections.property("mensagem.idMensagem"),"idMensagem")
	        .add(Projections.max("data"))
	        .add(Projections.groupProperty("idPessoa"))
	    );[/code]

Mas ele me retorna o grupo de mensagens, mas a primeira de cada pessoa.

Quando utilizei subquery, ele me diz que está retornando mais de uma linha dela (Claro que irá retornar, a última de cada pessoa!)

DetachedCriteria maxDateQuery = DetachedCriteria.forClass(Mensagem.class, "sub"); ProjectionList proj = Projections.projectionList(); proj.add(Projections.max("sub.data"),"maxData"); proj.add(Projections.groupProperty("sub.idPessoa"),"id"); maxDateQuery.setProjection(proj);

Acho que estou errando no modo que fiz a “junção” da query com a subquery que foi dessa forma:

Alguem pode me ajudar a ver o que pode ser?