yur*_*ura 9 java orm hibernate jpa toplink
我在Toplink找到了一些提示
Query query = em.createQuery("SELECT e FROM Employee e ORDER BY e.lastName ASC, e.firstName ASC");
query.setHint("eclipselink.cursor.scrollable", true);
ScrollableCursor scrollableCursor = (ScrollableCursor)query.getSingleResult();
List<Employee> emps = scrollableCursor.next(10);
Run Code Online (Sandbox Code Playgroud)
是否有jpa/hibernate备选方案?
Pas*_*ent 12
据我所知,JPA没有任何标准.
使用Hibernate,我所知道的最接近的选择是Query/ ScrollableResultsAPI.从文档:
10.4.1.6.可滚动迭代
如果JDBC驱动程序支持可滚动的ResultSet,则可以使用Query接口获取ScrollableResults对象,该对象允许灵活地导航查询结果.
Run Code Online (Sandbox Code Playgroud)Query q = sess.createQuery("select cat.name, cat from DomesticCat cat " + "order by cat.name"); ScrollableResults cats = q.scroll(); if ( cats.first() ) { // find the first name on each page of an alphabetical list of cats by name firstNamesOfPages = new ArrayList(); do { String name = cats.getString(0); firstNamesOfPages.add(name); } while ( cats.scroll(PAGE_SIZE) ); // Now get the first page of cats pageOfCats = new ArrayList(); cats.beforeFirst(); int i=0; while( ( PAGE_SIZE > i++ ) && cats.next() ) pageOfCats.add( cats.get(1) ); } cats.close()请注意,此功能需要打开数据库连接和游标.如果您需要离线分页功能,请使用
setMaxResult()/setFirstResult().
从其他答案来看,JPA不支持直接滚动,但如果你使用Hibernate作为JPA实现,你可以做到
javax.persistence.Query query = entityManager.createQuery("select foo from bar");
org.hibernate.Query hquery = query.unwrap(org.hibernate.Query);
ScrollableResults results = hquery.scroll(ScrollMode.FORWARD_ONLY);
Run Code Online (Sandbox Code Playgroud)
它访问底层的Hibernate api以进行滚动,但您可以使用JPA查询的所有功能.(至少对于条件查询,JPA api具有一些旧Hibernate api中没有的功能.)
| 归档时间: |
|
| 查看次数: |
14391 次 |
| 最近记录: |