2012-01-19 10 views
18

cuándo utilizar criterios separados? y ¿cuál es la ventaja que obtenemos mediante el uso de criterios separados en lugar de criterios normales?cuándo utilizar criterios separados en hibernación?

Criteria criteria = sessionFactory.getCurrentSession().createCriteria(Some.class); 


DetachedCriteria criteria = DetachedCriteria.forClass(Some.class); 

¡Gracias!

+1

http://docs.jboss.org/hibernate/core/3.3/reference/en/html /querycriteria.html#querycriteria-detachedqueries – Reddy

Respuesta

16

Según docs

Algunas aplicaciones necesitan para crear consultas de criterios en el "modo separado", donde la sesión de hibernación no está disponible. Esta clase puede ser instanciada en cualquier lugar, y luego se puede obtener un Criterio al pasar una sesión al getExecutableCriteria(). Todos los métodos tienen la misma semántica y comportamiento que los métodos correspondientes de la interfaz Criteria .

+3

Como robado de [documentos] (https://docs.jboss.org/hibernate/orm/3.5/api/org/hibernate/criterion/DetachedCriteria.html). –

10

'independiente de la sesión objeto'

Criterios independiente se pueden utilizar en dos escenarios: criterios

  1. construcción de consultas sin objeto de sesión:
    Sesión sólo requiere durante la ejecución de la consulta/presentación de la consulta a la base de datos, no al crear la consulta.

    Ex:

    DetachedCriteria detachedCriteria = DetachedCriteria.forClass(Department.class); 
        detachedCriteria.add(Restrictions.eq("DEPTID", 1)); 
        ProjectionList projectionList = Projections.projectionList(); 
        projectionList.add(Projections.property("DEPTID")); 
        detachedCriteria.setProjection(projectionList); 
    
        //Add more 
        ............................. 
    

    En el código anterior no se encuentra ninguna necesidad de contar con objeto de sesión para la construcción de una consulta tales criterios? Absolutamente no.

  2. Creación de la misma consulta de criterios para varias veces:
    Compilarlo una sola vez independientemente del objeto de sesión, y se puede usar cuando y donde quiera.

Finalmente, cuando el objeto de sesión está disponible, utilice la consulta anterior con la sesión de la siguiente manera:

detachedCriteria.getExecutableCriteria(session).list(); 
Cuestiones relacionadas