Hibernate - carga un objeto basado en el campo de un objeto miembro
Pregunta
¿Cómo se puede cargar un objeto a través de Hibernate basado en un valor de campo de un objeto miembro? Por ejemplo, suponga que existen las siguientes clases, con una relación uno a uno entre bar y foo:
Foo {
Long id;
}
Bar {
Long id;
Foo aMember;
}
¿Cómo podría uno usar los Criterios de Hibernación para cargar Bar si solo tuviera la identificación de Foo?
Lo primero que saltó a mi cabeza fue cargar el objeto Foo y establecerlo como Criterio para cargar el objeto Bar, pero eso parece un desperdicio. ¿Existe una manera efectiva de hacer esto con Criteria, o es HQL la forma en que esto debería manejarse?
Solución
Puede usar los Criterios de manera eficiente para lograr esto:
session.createCriteria(Bar.class).
createAlias("aMember", "a").
add(Restrictions.eq("a.id", fooId));
debería hacer el truco.
Otros consejos
Puede usar Criterios o HQL.
Ejemplo de HQL:
Consulta query = session.createQuery (" from Bar como barra donde bar.aMember.id =: fooId ");
query.setParameter (" fooId " ;, fooId);
Resultado de la lista = query.list ();