[RESOLVIDO]Otimizando o Select

Pessoal, estou enfrentando problema de lentidao no meu select, pois o select abaixo esta me retornando 1938 linhas, sendo que varias linhas repetidas, fiz um select utlizando o distinct retornou 60 linhas

como eu poderia utilizar o distinct no select abaixo :

		jpql.append("select e ");
		jpql.append("from Especificacao e ");
		jpql.append(" join e.analisesEspecificadas ae ");
		jpql.append(" join ae.analise a ");
		jpql.append("where a.matriz = :matriz ");

		ArrayList<ObjetoSelecionavel<Especificacao>> especs = new ArrayList<ObjetoSelecionavel<Especificacao>>();
		Set<Especificacao> especificacoesDaMatriz = analiseService
				.buscarEspecificacoesPorMatriz(matriz);
		
		
		for (Especificacao especificacao : especificacoesDaMatriz) {
			ObjetoSelecionavel<Especificacao> objSelecionavel = new ObjetoSelecionavel<Especificacao>(
					especificacao);
			especs.add(objSelecionavel);
		}


	@SuppressWarnings("unchecked")
	public Set<Especificacao> buscarEspecificacoesPorMatriz(Matriz matriz) {
		StringBuffer jpql = new StringBuffer();
		jpql.append("select e ");
		jpql.append("from Especificacao e ");
		jpql.append(" join e.analisesEspecificadas ae ");
		jpql.append(" join ae.analise a ");
		jpql.append("where a.matriz = :matriz ");

		Query query = em.createQuery(jpql.toString());
		query.setParameter("matriz", matriz);
		query.setHint("org.hibernate.cacheable", true);

		Set<Especificacao> especificacoes = new TreeSet<Especificacao>(query
				.getResultList());
		return especificacoes;
	}
jpql.append("select distinct e ");