2013-01-14 45 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節「獲取策略」。