Join com regra específica

Eu tive um problema, onde eu tenho uma entity com uma lista, mas só me interessa o registro mais atual dela, inclusive preciso de filtrar apenas com a mais atual. No meu caso tem Boleto, do Boleto tem um HistoricoStatus.
Na classe Boleto eu crio uma lista de Historico e anoto com a annotation @Filter

public static final String LATEST_STATUS_FILTER = "latestStatusFilter"; 

@OneToMany
@JoinColumn(name = "COD_BOLETO")
@Filter(name = LATEST_STATUS_FILTER, condition = 
"DTA_ATUALIZACAO = (select max(M.DTA_ATUALIZACAO) 
from HISTORICO_STATUS_BOLETO M where M.COD_BOLETO= COD_BOLETO)")
private List<HistoricoStatusBoleto> historicoList;

Na hora de realizar a consulta precisa de habilitar esse filter, para habilitar basta executar esse trecho.

org.hibernate.Session session = (Session) getEntityManager().getDelegate();
session.enableFilter(Boleto.LATEST_STATUS_FILTER);

Agora na hora de realizar o Join ele adiciona essa clausula no ON do JOIN.

Até mais,

Postado segunda-feira, agosto 10th, 2015 em Java.

Deixe uma resposta