hibernate - tiempo - diferencia entre los criterios y los criterios separados en hibernación?
pc hibernando como desactivar (4)
por favor dígame la diferencia entre los criterios y la crítica separada. y también ¿cuándo deberíamos ir por criterios y cuándo deberíamos ir por criterios separados? por favor sugiérame!
¡Gracias!
-El criterio asignado es muy bueno cuando la sesión de hibernación no está presente.
-Los criterios están en línea, lo que significa que usa el objeto de la clase Session. Pero el criterio separado está fuera de línea porque no necesita una sesión .
-Entonces los criterios de separación permiten la reutilización del código.
public static void main(String [] args) throws Exception {
AnnotationConfiguration cfg = new AnnotationConfiguration();
cfg.configure("hibernate.cfg.xml");
SessionFactory factory = cfg.buildSessionFactory();
Session session = factory.openSession();
System.out.println("By using criteria");
Criteria cr=session.createCriteria(Student.class);
cr.add(Restrictions.eq("gender", "male"));
cr.addOrder(Order.asc("stud_id"));
List<Student> res=((Criteria) cr).list();
for(int i=0;i<res.size();i++)
{
System.out.print( res.get(i).getStud_id()+"/t");
System.out.println(res.get(i).getName());
}
System.out.println("/n/nBy using Detached criteria");
DetachedCriteria dcr = DetachedCriteria.forClass(Student.class).add(Property.forName("gender").eq("male"));
dcr.addOrder(Order.desc("stud_id"));
List<Student> results = dcr.getExecutableCriteria(session).list();
for(int i=0;i<results.size();i++)
{
System.out.print( results.get(i).getStud_id()+"/t");
System.out.println(results.get(i).getName());
}
Haga clic aquí para ver las notas de implementación.
El uso de un DetachedCriteria es exactamente igual que un Criteria, excepto que puede hacer la creación y configuración inicial de su consulta sin tener acceso a la sesión. Cuando llega el momento de ejecutar su consulta, debe convertirla en una consulta ejecutable con getExecutableCriteria(session)
.
Esto es útil si está creando consultas complicadas, posiblemente a través de un proceso de varios pasos, porque no necesita acceder a la sesión en todas partes. Solo necesita la sesión en el último paso cuando ejecuta la consulta.
Bajo el capó, DetachedCriteria usa un CriteriaImpl que es la misma clase que obtienes si llamas a session.createCriteria()
.
Solo para actuar como un recordatorio. Si está utilizando Spring y elige usar HibernateTemplate, no proporciona el método createCriteria ().
Solo encontrarás DetachedCriteria.
Ver también:
El criterio separado le permite crear la consulta sin Session
. Luego puede ejecutar la búsqueda en una sesión arbitraria.
De hecho, debería pensar detenidamente al utilizar un detached criteria
utilizando otra sesión o una nueva (sin caché y creación de la sesión).
Son más útiles para condiciones de combinación, subselecciones y consultas fuera de la sesión actual.
Otro uso común es para la reutilización de código. Muchos desarrolladores los declaran como consultas static
y los ejecutan utilizando la sesión subyacente desde diferentes DAO
.