JPA Selecione a instância mais recente para cada item
Digamos que eu tenho uma entidade de reunião. Cada reunião tem um único participante e uma data de reunião. Na minha mesa de reunião, posso ter várias reuniões para cada participante, com datas diferentes para cada um. Preciso de uma consulta JPA que selecione apenas a reunião mais recente para todos os participantes. Por exemplo, se minha tabela tiver esta aparência
Meeting ID | Attendee ID | Meeting Date
1 | 1 | 6/1/2011
2 | 2 | 6/1/2011
3 | 1 | 6/6/2011
4 | 3 | 6/6/2011
Meu resultado deve ser
Meeting ID | Attendee ID | Meeting Date
2 | 2 | 6/1/2011
3 | 1 | 6/6/2011
4 | 3 | 6/6/2011
Usando o JPA 2 no postgres. A reunião tem de 1 a 1 para o participante e uma data simples de data e hora. Eu suspeito que vou precisar fazer um grupo com max (blá) e talvez juntar-me a mim mesmo, mas não tenho certeza da melhor maneira de abordar iss
Atualizar Depois de passar a noite brincando com isso, ainda não tenho uma solução JPQL aceitável para isso. Aqui está o que eu tenho até agora:
select m from Meeting m
where m.meetingDate in
( select max(meet.meetingDate)
from Meeting meet group by meet.attendee )
Tenho várias outras condições que não são relevantes para esta pergunta, como a filtragem por departamento de participantes e outros enfeites. A única razão pela qual isso funciona é porque estamos rastreando a data da reunião para a segunda (ou melhor) e a chance de haver duas reuniões exatamente ao mesmo tempo é mínima. Estamos colocando algumas coisas sobre Java para manter apenas a última reunião de cada participante, para o caso de termos duas ao mesmo tempo, mas essa é uma solução bastante ruim. Realmente não deve ser muito difícil obter tudo isso em uma consulta, mas ainda tenho que descobri
Update2: Adicionando tag sql porque se eu precisar usar o sql para criar uma view e criar um objeto JPA para mapear para a view, eu estou bem com iss