HQL - Como usar o distinct

2 respostas
L

Olá pessoal.
Eu quero fazer uma query a qual me devolve todos os registos que cumprem as condições mas sem resultados repetidos.

Tentei fazer uma query usando HQL mas não funciona. Sempre que crio uma query começada por “select” parece que o hibernateTemplate nao gosta… Todas as outras começadas por “from” estao a funcionar a 100%…

Este é o meu código:

public List findByDate(Date dataInicio, Date dataFim){
		
		SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd 00:00:00");
		String stringDateInicio = s.format(dataInicio);
		String stringDateFim = s.format(dataFim);
		
                String query = "select distinct techInfo.pcb_id from TechInfo techInfo where techInfo.receptDate between '" +  stringDateInicio + "' and '" + stringDateFim  + "'";
		
		return this.getHibernateTemplate().find(query);
	}

A minha base de dados é MySQL e estou a usar o hibernateTemplate como podem ver. A minha tabela TechInfo possui um campo pcb_id mas este campo não está no meu objecto techinfo.

Alguma ideia do que estou a fazer mal?

2 Respostas

J

alguns exemplos de distinct no hql :

http://www.hibernate.org/hib_docs/reference/en/html/queryhql.html

Pode usar Criteria tb, e bem simples de uma olhada na api :
Ex:

Criteria crit = session.createCriteria(Product.class);
        crit.add(Restrictions.gt("price",new Double(1.0)));
        crit.add(Restrictions.like("name","P%"));
        crit.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);

outro EX:

criteria = session.createCriteria(SuaClass.class); 
criteria.setProjection(Projections.projectionList().add( 
Projections.distinct(Projections.property("codigo"))) 
.add(Projections.property("nome")));
L

Obrigado pela ajuda JVander.

Eu resolvi o problema de outra forma. Acrescentei a propriedade pcb_id no “outro lado da relação”. Assim torno possivel andar de uma para outra nos 2 sentidos.

Criado 14 de janeiro de 2008
Ultima resposta 16 de jan. de 2008
Respostas 2
Participantes 2