¿Hay alguna forma de crear una consulta distinta en HQL? Ya sea usando la palabra clave "distinta" o algún otro método. No estoy seguro de si distinto es un trabajo clave válido para HQL, pero estoy buscando el equivalente en HQL de la palabra clave SQL "distinto".
100
Vale la pena señalar que la
distinct
palabra clave en HQL no se asigna directamente a ladistinct
palabra clave en SQL.Si usa la
distinct
palabra clave en HQL, a veces Hibernate usará ladistinct
palabra clave SQL, pero en algunas situaciones usará un transformador de resultados para producir resultados distintos. Por ejemplo, cuando está utilizando una combinación externa como esta:En este caso, no es posible filtrar duplicados a nivel SQL, por lo que Hibernate usa
ResultTransformer
para filtrar duplicados después de que se haya realizado la consulta SQL.fuente
haz algo como esto la próxima vez
fuente
También puedes usar
Criteria.DISTINCT_ROOT_ENTITY
con la consulta de Hibernate HQL.Ejemplo:
fuente
Tuve algunos problemas con los transformadores de resultados combinados con consultas HQL. Cuando lo intenté
no funcionó. Tuve que transformar manualmente así:
Con Criteria API, los transformadores funcionaron bien.
fuente
Mi consulta principal se veía así en el modelo:
Y todavía no obtenía lo que consideraba resultados "distintos". Eran simplemente distintos basados en una combinación de teclas primarias sobre la mesa.
Entonces
DaoImpl
, agregué un cambio de una línea y terminé obteniendo el retorno "distinto" que quería. Un ejemplo sería en lugar de ver 00 cuatro veces, ahora solo lo veo una vez. Aquí está el código que agregué aDaoImpl
:¡Espero que esto haya ayudado! Una vez más, esto solo podría funcionar si sigue prácticas de codificación que implementan el tipo de proyecto de servicio, dao y modelo.
fuente
Suponga que tiene una entidad de cliente asignada a la tabla CUSTOMER_INFORMATION y desea obtener una lista de nombres distintos de cliente. Puede usar el siguiente fragmento para obtener lo mismo.
Espero que ayude. Entonces aquí estamos usando group by en lugar de usar una palabra clave distinta.
También anteriormente me resultó difícil usar una palabra clave distinta cuando quiero aplicarla a varias columnas. Por ejemplo, quiero obtener una lista de nombre distinto, apellido y luego agrupar por simplemente funcionaría. Tuve dificultades para usar distinto en este caso.
fuente
Tengo una respuesta para que Hibernate Query Language use campos distintos. Puede usar * SELECT DISTINCT (TO_CITY) FROM FLIGHT_ROUTE *. Si usa una consulta SQL , devuelve String List. No puede usar su valor de retorno por clase de entidad. Entonces, la respuesta para resolver ese tipo de problema es usar HQL con SQL .
De la declaración de consulta SQL obtuvo DISTINCT ROUTE_ID y la entrada como una lista. Y la consulta IN filtra el TO_CITY distinto de IN (Lista).
El tipo de retorno es el tipo Entity Bean. Entonces puede hacerlo en AJAX como AutoComplement .
Que todo esté bien
fuente
Puede utilizar la palabra clave distinta en su generador de criterios como este.
Y crea el constructor de campo en tu clase de modelo.
fuente
Si necesita usar una nueva palabra clave para un DTO personalizado en su declaración de selección y necesita elementos distintos , use nuevo fuera de nuevo como sigue:
fuente
Simplemente puede agregar GROUP BY en lugar de Distinct
fuente