我正在使用 Spring Boot 端点从数据库查询中返回结果。在 TypedQuery 上使用 getResultList() 时效果很好。但是我知道我将不得不管理非常大的数据集。我正在研究通过休眠使用 ScrollableResults 但我无法弄清楚如何实际引用每一行的内容。
StatelessSession session = ((Session) entityManager.getDelegate()).getSessionFactory().openStatelessSession();
criteriaQuery.multiselect(selections);
criteriaQuery.where(predicates.toArray(new Predicate[]{}));
Query<?> query = session.createQuery(criteriaQuery);
query.setMaxResults(5);
query.setFetchSize(1000);
query.setReadOnly(true);
ScrollableResults results = query.scroll(ScrollMode.FORWARD_ONLY);
while(results.next()){
Object row = results.get();
}
results.close();
session.close();
我已经尝试过 results.get(0)、results.get(0)[0]、results.getLong(0)、Object[] 行与 Object 行等。在所有选项上使用和不使用 toString()。我所做的没有什么比 java 对象引用更多的了。我也尝试过投射并得到“无法投射错误”。有时我得到一个错误,“查询指定一个持有者类”。不确定这意味着什么,因为我的条件查询是通过加入 1 个或多个实体而构建的,其中实体和选定的列事先不知道。所以我实际上并没有指定一个类。它们的实体和选择由用户输入指定。有什么想法吗?谢谢!
更新:我可以做 System.out.println(scroll.getType(0)); 在这种情况下观察很长时间。但是当我尝试保存那么长的 (.getLong(0)) 时,我得到了错误,“查询指定了一个持有者类”。或者再次无法投射错误。