2013-01-14 161 views
3

我这样做对实体我懒加载收藏获取对象:休眠与多个关联

@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(); 
} 

我要回多延迟加载的集合加载一个实体对象,我可以做到这一点(通在一个列表中,并且设置多于单个标准的关联?):

@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(); 
    } 

回答

2

是吗?

docs包含以下内容:

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

这个查询可以通过外连接抓取mate和小猫。有关更多信息,请参见第20.1节“获取策略”。