3

hibernate http://java.dzone.com/articles/bulk-fetching-hibernateを使用した一括フェッチに関するブログを読んでいました。
これでScrollableResults、ソリューションとして使用されます。ここでも、セッションからオブジェクトを削除する必要があります。(または) の使用と の使用の違いが
わかりません。ScrollableResultsscroll()list()

つまり、以下のステートメントがパフォーマンスの点でどのように異なるか

 List<Employee> empList = session.createCriteria(Employee.class).list();
 ScrollableResults sc = session.createCriteria(Employee.class).scroll();

私にお知らせください。

4

2 に答える 2

2

上記のコードには、いくつかの設定が欠けているようです。

Query query = session.createQuery(query);
query.setReadOnly(true);
// MIN_VALUE gives hint to JDBC driver to stream results
query.setFetchSize(Integer.MIN_VALUE);
ScrollableResults results = query.scroll(ScrollMode.FORWARD_ONLY);
// iterate over results
while (results.next()) {
    Object row = results.get();
    // process row then release reference
    // you may need to flush() as well
}
results.close();

詳細と説明については、このリンクをたどってください。

于 2014-12-09T05:57:52.057 に答える
1

list() と scroll() の違いを理解するために、Hibernate API ドキュメントを参照しました。ScrollableResults はカーソルのようなものです。ScrollableResults の重要な機能は、get(int i) 関数を介して行内の他の結果を初期化することなく、現在の結果行の i 番目のオブジェクトにアクセスできることです。また、next() および previous() 関数を使用して結果セットを前後に移動することもできます。

例 :

  ScrollableResults sc = session.createQuery("select e.employeeName,e.employeeDept FROM Employee e").scroll(ScrollMode.SCROLL_INSENSITIVE);
      while(sc.next()) {
         String empName = (String)sc.get(0);
         System.out.println(empName);
         String empdept = (String)sc.get(1);
         System.out.println(empdept);
      }

上記のプログラムの出力は、 employeeName および employeeDept の値になります。

ここで、resultSet の最後のレコードを取得したいとします。list() を使用すると、結果全体を反復する必要があります。ScrollableResults では、last()関数を使用できます。

ScrollableResults sc = session.createCriteria(Employee.class).scroll();for は次のように反復する必要があることに注意してください

 while(sc.next()) {
     Employee emp = (Employee)sc.get(0);
     System.out.println(emp.getname);
 }
于 2014-12-08T23:37:00.500 に答える