如何在ManyToMany关联中获取表的分页结果

时间:2013-11-14 13:37:03

标签: java hibernate

我有一个建模为

的用户实体
@Entity
class User {
    @ManyToMany
    @JoinTable(name="user_roles",
        joinColumns=@JoinColumn(
            name="user_id", referencedColumnName="id"),
        inverseJoinColumns=@JoinColumn(
            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 个答案:

答案 0 :(得分:1)

在Hibernate中:

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