Dúvidas no distinct do Hibernate

Pessoal estou tentando fazer uma busca no hibernate utilizando o distinct mas ainda nao deu mto certo… :frowning: .Alguém poderia me dizer onde possso estar errando?. Segue abaixo o meu código.


public List<SolicitacaoDeterminacao> buscarTodas() throws Exception {

		List<SolicitacaoDeterminacao> listaRetorno = null;

		try {

			Session session = HibernateUtil.getSessionFactory().openSession();
			Criteria criteria = session
					.createCriteria(SolicitacaoDeterminacao.class);
			criteria.setProjection(Projections.property("amostra"));

			criteria.createAlias("solicitacao", "s");
			criteria.createAlias("amostra", "a");
			criteria.addOrder(Order.asc("s.codigo"));
			criteria.add(Restrictions.like("s.status", "%Finalizada%"));
			criteria.add(Restrictions.like("a.recomendacaoSolicitada", "%Sim%"));
			listaRetorno = (List<SolicitacaoDeterminacao>) criteria.list();

		} catch (Exception e) {
			e.printStackTrace();
		}

		return listaRetorno;

	}

O que estou tentando fazer basicamente se resume nessa consulta:

select distinct sd.id_amostra as am from solicitacaodeterminacao sd, amostra a, solicitacaodeanalise s
where a.recomendacaoSolicitada = “Sim” and s.status = “Finalizada”;

Alguém poderia me dizer onde estou errando no hibernate?.

Desde já agradeço.

Renan.

E cadê a cláusula do distinct?

É a linha abaixo. Procurando no GUJ encontrei alguns tópicos onde o pessoal trabalha dessa forma para indicar o campo a dar o distinct. Esta errado? :?


criteria.setProjection(Projections.property("amostra")); 

Valeu.

Abraços.

Qual o SQL gerado?

olha um exemplo :

	    			      ProjectionList projectionList = Projections.projectionList();
 	    	              projectionList.add(Projections.property("grupo"));
 	    	              projectionList.add(Projections.property("preco"));
 	    	              criteria.setProjection(Projections.distinct(projectionList));
 	     	    	      Long teste1 = (long) 4435; 
    	 	    	      criteria.add(Restrictions.eq("metodoId", (teste1))); 	    	        

     	    	          List lista = criteria.list();
     	    	         System.out.println("Distinct Count:  "+ lista);

Como eu faço para verificar o sql gerado ??

Se usa o hibernate, ative a propriedade hibernate.show_sql com valor true

#properties
hibernate.show_sql=true