读书人

JPA分页的有关问题?感觉效率不行

发布时间: 2012-05-04 12:36:09 作者: rapoo

JPA分页的问题?感觉效率不行

Java code
public List getPersonList(int max, int whichpage) {        try {            int index = (whichpage - 1) * max;            Query query = em.createQuery("from Person p order by personid asc");            List list = query.setMaxResults(max).setFirstResult(index).getResultList();            em.clear();// 分离内存中受EntityManager管理的实体bean,让VM进行垃圾回收            return list;        } catch (Exception e) {            e.printStackTrace();            return null;        }    }

上面是网上查到JPA分页的例子,发现JPA分页有2个缺陷
1. 类似于上例,用query.setFirstResult(5);query.setMaxResults(2)是想找第5--7条
虽然结果正确,但看了log中的sql,竟然是select top 7 然后返回第6,7两条。而我们自己写sql则是可通过一定的写法直接返回第6.7条。 如果数据量大JPA且不是要查询装载很多额外的数据?
2. 用该方法查找出来的无法缓存?

请问是这样吗,有没有更好的办法?
如例子中如果不用em.clear会有什么副作用?

[解决办法]
OK,用的sqlserver,让我们来看看hibernate3.3中SqlServerDialect是怎么处理分页的
Java code
    public String getLimitString(String querySelect, int offset, int limit) {        if ( offset > 0 ) {            throw new UnsupportedOperationException( "query result offset is not supported" );        }        return new StringBuffer( querySelect.length() + 8 )                .append( querySelect )                .insert( getAfterSelectInsertPoint( querySelect ), " top " + limit )                .toString();    } 

读书人网 >J2EE开发

热点推荐