JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Object Relational Mapping » Hibernate  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友    訂閱主題
reply to postflat modego to previous topicgo to next topic
本主題所含的標籤
作者 setFetchSize 沒有效果
jenuls





發文: 49
積分: 0
於 2016-10-19 01:49 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
Dear 大大,您好,
最近在測試hibernate 的 setFetchSize() , 程式碼如下

1
2
3
4
5
6
7
8
9
STATISTICS stats = HibernateUtil.getSessionFactory().getStatistics();
session = HibernateUtil.getSessionFactory().openSession();
tx = session.beginTransaction();
stats.clear();
Query query = session.createSQLQuery("select * from Account ").addEntity(Account.class);
query.setFetchSize(10);
System.out.println("1. stats.getEntityLoadCount() = " +stats.getEntityLoadCount());
QUERY.list();   //向資料庫向sql語法
System.out.println("2. stats.getEntityLoadCount() = " +stats.getEntityLoadCount());


出現如下結果

1
2
3
4
5
1. stats.getEntityLoadCount() = 0
SELECT * 
   FROM
   Account
2. stats.getEntityLoadCount() = 256


依我的認知, setFetchSize(10) 表示不管搜尋結果資料多少筆,一次只送10筆資料過來,以節省hibernate的記憶體。也就是在執行QUERY.list(); 應該只先傳回10筆資料,產生10筆 entity 出來。可是實測結果發現。所有資料都載入了,共256筆,並非只載入10筆 entity。難道是 setFetchSize 沒有效果嗎? 我在oracle 及 mysql 都測試過,結果都一樣。載入所有的筆數, setFetchSize 沒有效果。 我使用的環境如下:
JAVA: jdk1.6.0.23
hibernate : hibernate5.01
jdbc
oracle: ojdbc6.jar oracle.jdbc.OracleDriver
mysql: mysql-connector-java-5.1.18-bin.jar com.mysql.jdbc.Driver

難道是我的jdbc Driver 不支援,還是我的測試方式錯誤?若是測試方式錯誤,那要如何測試 setFetchSize() 的效果。
煩請各位大大不吝指教。


reply to postreply to post
話題樹型展開
人氣 標題 作者 字數 發文時間
502 setFetchSize 沒有效果 jenuls 1214 2016-10-19 01:49
» JWorld@TW »  Object Relational Mapping » Hibernate

reply to postflat modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8