Hibernate - carregar um objeto com base no campo de um objeto membro
Pergunta
Como pode um objeto ser carregado via Hibernate com base em um valor de campo de um objeto membro? Por exemplo, suponha que as seguintes classes existiu, com um relacionamento um-para-um entre bar e foo:
Foo {
Long id;
}
Bar {
Long id;
Foo aMember;
}
Como poderia um usam critérios do Hibernate para carregar Bar se você só tinha o id do Foo?
A primeira coisa que pulou na minha cabeça foi para carregar o objeto Foo e conjunto que como critério para carregar o objeto Bar, mas que parece um desperdício. Existe uma maneira eficaz de fazer isso com critérios, ou é HQL a forma como este deve ser tratado?
Solução
Você pode absolutamente usar Critérios de uma maneira eficiente para fazer isso:
session.createCriteria(Bar.class).
createAlias("aMember", "a").
add(Restrictions.eq("a.id", fooId));
deve fazer o truque.
Outras dicas
Você pode usar critérios ou HQL.
HQL exemplo:
Consulta query = session.createQuery ( "do Bar como bar onde bar.aMember.id =: fooId");
query.setParameter ( "fooId", fooId);
Lista result = Query.list ();