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)) を保存しようとすると、「クエリはホルダー クラスを指定しています」というエラーが表示されます。または再びエラーをキャストできません。