Pessoal tenho a classe de pesquisa abaixo, onde estou buscando as amostras de uma solicitação, onde a amostra é chave estrangeira da tabela de solicitação. Estou exibindo os dados em uma tabela e esta listando as amostra duplicada pq para a mesma amostra tenho mais de um elemento ligado a ela. Gostaria de saber como fazer no caso para listar as amostras sem duplicar. Acredito que o distinct resolva mas tentei usa-lo e sem sucesso. Alguem ajuda??
Tinha tentando usar da seguinte forma, porém não funcionou:
criteria.setProjection(Projections.distinct(Projections.property("s.id_amostra")));
da o erro:
org.hibernate.QueryException: could not resolve property: id_amostra of: to.SolicitacaoDeAnalise
Tentei da forma que você citou, não funcionou, não entendi nesse caso como que o criteria entende que é para fazer o distinct na chave estrangeira. To meio perdido em relação a isso cara…rsrs…
Estava relendo melhor seu post inicial para tentar entender melhor a questão.
Vou traduzir em pseudo-SQL pq acho mais fácil entender. Basicamente o que o código inicial faz é:
Para recuperar as amostras em questão, sem duplicidade, o DINTINCT resolveria.
No caso, não tenho certeza de como fazer isso no hibernate. Talvez consiga fazer uns testes mais tarde.
Algumas sugestões, entretanto, são:
“id_amostra” é o nome do campo no BD ou é o nome do atributo? Se for o nome do campo, tente especificar o nome do atributo no parâmetro do Projections.
O distinct geralmente leva em consideração todos os campos selecionados, tente selecionar apenas o campo que precisa, no caso, o código da amostra e talvez o Projections funcione.
Por outro lado, uma forma mais “natural” em termos de SQL, sem o uso de distinct, seria:
Explicando: selecione todas as amostras que existam na tabela SolicitacaoDeterminacao após filtrar pelo código de solicitação.
Se entendeu, você pode tentar tradudir isso usando Criteria ou HQL.