DetachedCriteria分页中有重复记录的问题

来源:互联网 发布:6星御魂副属性成长数据 编辑:程序博客网 时间:2024/06/06 01:47

userinfo表和roleinfo表,二者为多对多关系,通过关联表userinfo_roleinfo连接。
通过public List <UserInfo> getInfos(int firstResult)方法获取要在一页中显示的数据。

userinfo数据:                userinfo_roleinfo数据:                    roleinfo数据:
userId  username              userId      roleId                        roleId    roleName
1        user1                          1               1                              1           role1
2        user2                          2               1                              2           role2
3        user3                          3               1
4        user4                          4               1
5        user5                          1               2
6        user6                          5               1


使用DetachedCriteria

Java code
public List<UserInfo> getInfos(int firstResult){ log.debug("finding specified UserInfo instances"); try { DetachedCriteria criteria = DetachedCriteria.forClass(UserInfo.class) return getHibernateTemplate().findByCriteria(criteria, firstResult, 3); } catch (RuntimeException re) { log.error("find failed", re); throw re; }}


由于是left outer join,所以执行getInfos(0)有重复数据。得到的三个UserInfo的实例id为:1,1,2,前两个重复。
加上setResultTransformer(DetachedCriteria.DISTINCT_ROOT_ENTITY),后去掉了重复结果,但只得到两个UserInfo的实例。
这种情况下分页会出现问题。

改用下面的方法就没有问题了:

Java code
public List<UserInfo> getInfos(int firstResult){ log.debug("finding specified UserInfo instances"); try { String queryString = "from UserInfo"; Query query = this.getSession().createQuery(queryString); query.setFirstResult(firstResult); query.setMaxResults(3); return query.list(); } catch (RuntimeException re) { log.error("find failed", re); throw re;}


执行getInfos(0),得到的是id为1,2,3的三个UserInfo实例。
但是,这种方法会执行一堆的sql语句,很恐怖。

暂时没有发现用DetachedCriteria实现需求的做法。如果哪位有解决办法,请分享一下

原创粉丝点击