Dúvidas no distinct do Hibernate

6 respostas
R

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.

6 Respostas

drsmachado

E cadê a cláusula do distinct?

R

É 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.

drsmachado

Qual o SQL gerado?

E

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);
E

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

drsmachado

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

#properties
hibernate.show_sql=true
Criado 5 de novembro de 2012
Ultima resposta 5 de nov. de 2012
Respostas 6
Participantes 3