viernes, 5 de noviembre de 2010

CRITERIA (CRITERIOS)

1. CREACIÓN DE UNA INSTANCIA DE CRITERIOS

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.

Las Restricciones pueden agruparse de forma lógica:

Hay una amplia gama de tipos de criterios integrados (subclases restricciones). Uno de los más útiles le permite especificar SQL directamente.


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:


(createAlias() no crea una nueva instancia de Criteria).

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.

Además es posible manipular los resultados utilizando una combinación externa:


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 ().

Esta consulta buscará tanto compañero y gatitos por combinación externa. Consulte Sección 20.1, "Captación de estrategias" para obtener más información.


6. EJEMPLOS DE CONSULTAS

La clase org.hibernate.criterion.Example permite construir un criterio de consulta de una instancia determinada.

Las propiedades de la versión, los identificadores y las asociaciones son ignoradas. Por defecto, las propiedades que son null son excluidas.

Puede verse el ejemplo:


Puede incluso usar ejemplos para colocar criterios sobre los objetos asociados



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:

También puede utilizar Property.forName () para expresar las proyecciones:



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 y permita el uso de la memoria caché de segundo nivel.



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.


1 comentario: