Fórum Distinct não funciona #388497
14/10/2010
0
Barcelos.java
Curtir tópico
+ 0Posts
14/10/2010
Davi Costa
vc está usando Hibernate?
Se tiver e vc refazer essa consulta com Criteria não vai ter problema algum. Vai funcionar tranquilo.
Mas se tiver usando somente JPA, acredito que a versão 2.0 já tem sua implementação do Criteria,
mas não sei como fazer. Dá um toque se tiver usando Hibernate, caso estiver e precise posso até postar um código de exemplo aqui.
Att Davi
Gostei + 0
14/10/2010
Barcelos.java
Gostei + 0
14/10/2010
Davi Costa
Criteria criteria = session.createCriteria( MyEntity.class );
criteria.setProjection( Projections.distinct( Projections.property( "id" ) ) );
Na documentação do Hibernate também achei :
select distinct cat.name from Cat cat
Muito parecido com o q vc fez mas tirando os parênteses.
Testa aí e depois manda o feedBack
Att Davi
Gostei + 0
14/10/2010
Barcelos.java
Gostei + 0
14/10/2010
Davi Costa
Criteria criteria = ((Session)entityManager.getDelegate()).createCriteria(Negociacao.class);
criteria.setProjection( Projections.distinct( Projections.property( "solicitacao" ) ) );
criteria.add(Restrictions.eq("solicitacao", isnSolicitacao));
O problema é que como esse atributo não é diretamente da entidade Negociacao vc vai ter adicionar outros criterias, o que ficaria mais ou menos assim:
Criteria criteria = ((Session)entityManager.getDelegate()).createCriteria(Negociacao.class);
Criteria cotacaoCriteria = criteria.createCriteria("cotacaoItem");
Criteria solicitacaoCriteria = cotacaoCriteria.createCriteria("solicitacaoFornecedor");
solicitacaoCriteria.setProjection( Projections.distinct( Projections.property( "solicitacao" ) ) );
solicitacaoCriteria.add(Restrictions.eq("solicitacao", isnSolicitacao));
e no fim do método retorna:
return criteria.list();
Para maiores dúvida dá uma olhada na documentação:
http://docs.jboss.org/hibernate/core/3.3/reference/en/html/querycriteria.html
Espero ter ajudado e só por desencargo de consciência dá uma testada naquele hql que passei do distinct
sem os parênteses como havia falado p ver se funciona tb.
Att Davi
Gostei + 0
14/10/2010
Barcelos.java
Gostei + 0
14/10/2010
Davi Costa
cara acredito então para o caso do distinct, tenha que ser feito o select diretamente na entidade
que possui o atributo, ou seja, a partir do relacionamento das tuas entidades fazer um outro select que atenda a sua necessidade, trazendo as negociações a partir do solicitacaoFornecedor.
Mas tranquilo, testa o código que passei dá uma olhada na documentação para entender o que acontece (não custa nada e é mais aprendizado) e manda o feedBack.
Att Davi
Gostei + 0
15/10/2010
Barcelos.java
Gostei + 0
15/10/2010
Davi Costa
Posta mesmo caso vc descubra uma forma melhor de usar o distinct.
Só mais uma dica, quando estamos usando o criteria podemos usar query nativa do próprio banco.
Sempre que o hibernate não atende minha consulta (o que honestamente é muito difícil - só passei por isso uma vez) eu apelo para native query. Dá uma pesquisada nisso. Simplesmente é mais uma restrição que usamos e ele espera uma String como parâmetro que justamente o sql nativão mesmo do seu banco de dados para ele e ele executa o select. Agora temos que ter um pouco de cuidado, como até já falei aqui em outras threads, o grande lance do Hibernate é deixar sua aplicação multi banco, se vc usar alguma função muito específica do seu banco como tem o postgres, o oracle... sua aplicação vai ficar amarrada para esse determinado banco. Mas temos aí o SQL ANSI que roda em todos os bancos, então sempre buscamos usar SQL ANSI para continuar deixando nossa aplicação multi banco, algumas vezes vai ser difícil, mas pelo menos temos q estar cientes de que se mudar de banco temos que refatorar um pouco a aplicação.
Abraço
Gostei + 0
19/10/2010
Dyego Carmo
eu tmb utilizaria query nativa se o hibernate em nao ajudasse na hora de realizar um select :)
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)