Existe uma maneira de criar uma consulta distinta em HQL. Usando a palavra-chave "distinto" ou algum outro método. Não tenho certeza se distinto é um keywork válido para HQL, mas estou procurando o equivalente em HQL da palavra-chave SQL "distinto".
100
É importante notar que a
distinct
palavra - chave em HQL não mapeia diretamente para adistinct
palavra - chave em SQL.Se você usar a
distinct
palavra - chave em HQL, às vezes o Hibernate usará adistinct
palavra-chave SQL, mas em algumas situações ele usará um transformador de resultado para produzir resultados distintos. Por exemplo, quando você está usando uma junção externa como esta:Não é possível filtrar duplicatas no nível SQL neste caso, então o Hibernate usa um
ResultTransformer
para filtrar duplicatas após a consulta SQL ter sido realizada.fonte
faça algo assim da próxima vez
fonte
Você também pode usar
Criteria.DISTINCT_ROOT_ENTITY
a consulta Hibernate HQL.Exemplo:
fonte
Tive alguns problemas com transformadores de resultado combinados com consultas HQL. Quando eu tentei
não funcionou. Tive que transformar manualmente assim:
Com os transformadores Criteria API funcionou muito bem.
fonte
Minha consulta principal era assim no modelo:
E eu ainda não estava obtendo o que considerava resultados "distintos". Eles eram apenas distintos com base em uma combinação de teclas primárias na tabela.
Então, no
DaoImpl
acrescentei uma mudança de linha e acabei obtendo o retorno "distinto" que queria. Um exemplo seria, em vez de ver 00 quatro vezes, agora vejo apenas uma vez. Aqui está o código que adicionei aoDaoImpl
:Espero que tenha ajudado! Mais uma vez, isso pode funcionar apenas se você estiver seguindo as práticas de codificação que implementam o serviço, dao e tipo de projeto de modelo.
fonte
Suponha que você tenha uma Entidade do Cliente mapeada para a tabela CUSTOMER_INFORMATION e deseja obter uma lista de nomes distintos do cliente. Você pode usar o snippet abaixo para obter o mesmo.
Espero que ajude. Então, aqui estamos usando group by em vez de palavras-chave distintas.
Também anteriormente achei difícil usar palavras-chave distintas quando desejo aplicá-las a várias colunas. Por exemplo, eu quero obter uma lista de firstName, lastName distintos e agrupar por simplesmente funcionaria. Tive dificuldade em usar distinto neste caso.
fonte
Eu tenho uma resposta para Hibernate Query Language para usar campos distintos. Você pode usar * SELECT DISTINCT (TO_CITY) FROM FLIGHT_ROUTE *. Se você usar a consulta SQL , ele retornará a Lista de String. Você não pode usar o valor de retorno por classe de entidade. Portanto, a resposta para resolver esse tipo de problema é usar HQL com SQL .
Da instrução de consulta SQL , obteve DISTINCT ROUTE_ID e entrou como uma lista. E a consulta IN filtra o TO_CITY distinto de IN (Lista).
O tipo de retorno é o tipo Entity Bean. Então você pode fazer isso em AJAX, como AutoComplement .
Que tudo fique bem
fonte
Você pode definir a palavra-chave distinta em seu construtor de critérios como este.
E crie o construtor de campo em sua classe de modelo.
fonte
Se você precisar usar uma nova palavra-chave para um DTO personalizado em sua instrução select e precisar de elementos distintos , use new out of new como a seguir-
fonte
Você pode simplesmente adicionar GROUP BY em vez de Distinct
fonte