2013-11-14 2 views
0

내가 페이지 매김보기에서이 사용자 특정 역할을 나열 할 어떻게 ManyToMany 협회

@Entity 
class User { 
    @ManyToMany 
    @JoinTable(name="user_roles", 
     [email protected](
      name="user_id", referencedColumnName="id"), 
     [email protected](
      name="role_id", referencedColumnName="id") 
     ) 
    public Set<Role> getRoles() { 
     return roles; 
    } 
} 

로 모델링 된 사용자 개체가 오전에 테이블 매겨진 결과를 가져올 수 있습니다. 다른 클래스를 위해 내가 좋아하는 HibernateTemplate에 사용하고이

public PagedBean<User> findUsers(inal Status status, final PageParameters pageParameters) { 
    return (PagedBean<User>) hibernateTemplate.execute(new HibernateCallback(){ 
    public Object doInHibernate(Session session) throws HibernateException, SQLException { 
     Criteria crit = getUserByStatusCriteria(status, session); 
     crit.addOrder(Order.asc("id")); 
     Criteria critWithoutOrder = getUserByStatusCriteria(status, session); 
     PagedResultBean<RssFeedSource> pagedResultBean = new PagedBean<User>(pageParameters); 
     return populateFromCriteria(crit, critWithoutOrder, pagedBean); 
    } 

    private Criteria getUserByStatusCriteria(final Status status, Session session) { 
     Criteria c = session.createCriteria(User.class); 
     c.add(Restrictions.eq("status", status)); 
     return c; 
    }}); 

}

어떻게 실체없는 'user_roles'에 대한 위와 같은 방법으로이 매겨진 결과를 달성하기 위해? 최대 절전 모드에서

답변

1

:

Query q= session.createQuery("SELECT r FROM User u JOIN u.roles r WHERE u.id = :userId"); 
q.setString("userId", userId); 
q.setMaxResults(10); // page size 10 
q.setFirstResult(30); // page 4 
List<?> roleList = q.list(); 
+0

것은 내가 거기에 상응하는 것입니다 무슨 스프링 프레임 워크를 사용하고 있습니다. 이것을 수행하는 방법이 명확하지 않기 때문에 몇 가지 지침을 제공합니까? – Achaius

+0

나는 Hibernate의 API를 반영하기 위해 나의 대답을 업데이트했다. roleList는 목록 이됩니다. –