Distinct em tabela composta usando Criteria

2 respostas
aquilante

Pessoal estou com essa questão aqui. Preciso usar um distinct em uma tabela, preciso dos registro sem repetição, detalhe é que a tabela tem chave composta.

Estou fazendo assim:

Session executableCriteria = ((Session) entityManager.getDelegate());
Criteria cri = executableCriteria.createCriteria(ComponenteEquipe.class);
cri.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
List results = cri.list();

o Criteria.DISTINCT_ROOT_ENTITY funciona pra chave composta? Pois ta retornando todos os registros, não ta filtrando.

Alguem pode da uma ajuda?

2 Respostas

arthurminarini

tente criteria.setProjection( Projections.distinct( Projections.property( “id” ) ) );

aquilante

Pronto galera resolvido, não foi da forma que eu queria, mas consegui.

Ficou assim:

Session executableCriteria = ((Session) entityManager.getDelegate());
Criteria cri = executableCriteria.createCriteria(ComponenteEquipe.class);
cri.setProjection(Projections.distinct(Projections.property("componenteEquipePk.equipe.id")));
List results = cri.list();

O results me retorna os id’s sem repetição.

Dae eu faço um findByid em Equipes e trago uma lista de equipes pelos id’s

for(int i=1;i<=results.size(); i++) {
	query = entityManager
		.createQuery("SELECT e " + "FROM Equipe e where e.id = " + i);	
				
Object eq = query.getSingleResult();
equipe = (Equipe) eq;
listaTemp.add(equipe);
		}
		
List<ComponenteEquipe> result = listaTemp;

Não sei se é a melhor forma, mas é a melhor que tenho no momento.

Vlw!

Criado 2 de abril de 2009
Ultima resposta 2 de abr. de 2009
Respostas 2
Participantes 2