La interfaz org.hibernate.Criteria representa una consulta contra una clase persistente en particular. La session es una fábrica para las instancias de Criteria.
2. ESTRECHANDO EL CONJUNTO DE RESULTADOS
Un criterio de consulta individual es una instancia de la interfaz org.hibernate.criterion.Criterion. La clase org.hibernate.criterion.Restrictions define los métodos de la fábrica para obtener ciertos tipos integrados de Criterios.
El marcador de posicion {alias} se sustituye por el alias de fila de la entidad consultada.
Se puede obtener un criterio desde una instancia de la propiedad. También se puede crear una propiedad llamando al método Property.forName();
3. ORDENANDO LOS RESULTADOS
Puedes ordenar los resultados usando org.hibernate.criterion.Order
4. ASOCIACIONES
Al navegar por las asociaciones con createCriteria (), puede especificar restricciones a las entidades relacionadas.
El segundo createCriteria () devuelve una nueva instancia de Criteria que se refiere a los elementos de la colección de gatitos.
También existe una forma alternativa que es útil en determinadas circunstancias:
Las colecciones de gatitos sostenidos por las instancias de gato devueltos por las dos anteriores consultas no son pre-filtrada por el criteria. Si desea recuperar sólo los gatitos que cumplen los criterios, debe utilizar un ResultTransformer.
Esto devolverá todos los Gatos con un compañero (mate) cuyo nombre comienza con "good", ordenado por la edad de su compañero, y todos los gatos que no tienen un compañero. Esto es útil cuando hay una necesidad de orden o límite en la base de datos antes de devolver un complejo o conjuntos de resultados grandes, y elimina muchos casos donde varias consultas tendrían que llevarse a cabo y los resultados unirse en la memoria de java.
Sin esta función, en primer lugar todos los gatos sin pareja tendría que ser cargado en una consulta.
Una segunda consulta que se necesitaría para recuperar los gatos con sus compañeros de cuyo nombre comience con "good" ordenados por la edad.
En tercer lugar, en la memoria, la lista tendría que ser unida manualmente.
5. RECUPERACIÓN DINÁMICA DE ASOCIACIONES
Se puede especificar la semántica de recuperación de asociaciones en tiempo de ejecución utilizando setFetchMode ().
6. EJEMPLOS DE CONSULTAS
La clase org.hibernate.criterion.Example permite construir un criterio de consulta de una instancia determinada.
Puede verse el ejemplo:
7. PROYECCIONES, AGREGACIÓN Y AGRUPAMIENTO
La clase org.hibernate.criterion.Projections es una fábrica de instancias de proyección. Se puede solicitar una proyección a una consulta llamando a setProjection().
No hay ningún explícito "grupo por" necesario en una consulta de criterios. Ciertos tipos de proyección se definen como agrupación de proyecciones, que también aparecen en el grupo de cláusulas en SQL.
Un alias puede ser asignado a una proyección de manera que el valor proyectado se puede hacer referencia a las restricciones u ordenamientos. Aquí hay dos formas diferentes de hacer esto:
Los métodos alias() y as() simplemente envuelve una instancia en otra. Como un acceso directo, se puede asignar un alias cuando se agrega la proyección a una lista de proyección:
8. CONSULTAS INDEPENDIENTES Y SUBCONSULTAS
La clase DetachedCriteria le permite crear una consulta fuera del ámbito de una sesión y lueg ejecutarlo con periodo arbitrario.
Un DetachedCriteria también se puede utilizar para expresar una subconsulta. Instancias de criterios implican subconsultas que se pueden obtener a través de subconsultas o de propiedades.
Las subconsultas correlacionadas también son posibles:
9. CONSULTAS POR IDENTIFICADOR NATURAL
Para la mayoría de las consultas, incluidas las consultas por criterio(CRITERIA), el juego de consultas no son eficientes debido a la invalidación que se produce con demasiada frecuencia. Sin embargo, hay un tipo especial de consulta donde se puede optimizar el algoritmo de invalidación del juego: búsquedas por una clave natural constante. En algunas aplicaciones, este tipo de consulta ocurre frecuentemente. El API CRITERIA proporciona una disposición especial para este caso.
En primer lugar, asigne la clave natural de la entidad que utiliza
Esta funcionalidad no está diseñada para utilizarse con entidades con claves naturales mutable.
Una vez que haya habilitado el juego de consultas de Hibernate, el Restrictions.naturalId () le permite hacer uso del algoritmo del juego más eficiente.
Buen resumen.
ResponderEliminar