2013-01-14 3 views
3

Je fais cela pour mes collections de charge paresseux sur les objets entité:Hibernate chercher avec plusieurs associations

@Transactional(readOnly = true) 
public T getWithAssociation(final long id, String association) { 
    Session session = sessionFactory.getCurrentSession(); 
    final Criteria crit = session.createCriteria(genericType); 
    crit.setFetchMode(association, FetchMode.JOIN); 
    crit.add(Property.forName("id").eq(id)); 
    return (T) crit.uniqueResult(); 
} 

Je veux retourner un objet entité avec de multiples collections chargées paresseux chargées, je peux le faire (laissez-passer dans une liste et définir plus qu'une association pour un seul critère?):

@Transactional(readOnly = true) 
    public T getWithAssociations(final long id, List<String> associations) { 
     Session session = sessionFactory.getCurrentSession(); 
     final Criteria crit = session.createCriteria(genericType); 
     for(String association:associations) { 
      crit.setFetchMode(association, FetchMode.JOIN); 
     } 
     crit.add(Property.forName("id").eq(id)); 
     return (T) crit.uniqueResult(); 
    } 

Répondre

2

Oui?

Le docs contiennent les éléments suivants:

List cats = sess.createCriteria(Cat.class) 
    .add(Restrictions.like("name", "Fritz%")) 
    .setFetchMode("mate", FetchMode.EAGER) 
    .setFetchMode("kittens", FetchMode.EAGER) 
    .list(); 

Cette requête recherchera mate et chatons par jointure externe. Voir Section 20.1, «Récupération des stratégies» pour plus d'informations.

Questions connexes