Hibernate中list和Iterate區別

oracle數據庫表dept3

create table dept3 as select * from dept;
alter table dept3 modify(deptno number primary key);

使用list查詢

使用iterate方法查詢

* list和iterate的區別?
   * list在默認情況下,只向緩存中放入數據,而不利用緩存中的數據
   * iterate在默認情況下有N+1問題,如果緩存中存在數據那麼會根據id到緩存獲取數據
     也就說iterate是利用緩存的。

* N+1問題,在默認情況下使用query.iterate查詢,有可能出現N+1問題,所謂的N+1
     是查詢對象的時候發出了N+1條sql語句

    1:首先發出一條查詢id列表的sql
    N:根據id列表發出n條查詢語句

    使用iterate查詢實體對象的時候,會先發出一條查詢滿足條件Id的sql語句,然後會在緩存中根據實體類型和Id查找是否已經存在,如果已經存在,則直接將該數據對象作爲查詢結果,否則,會根據Id重新發一條sql語句到數據庫中查詢,當然該查詢結果也是會被放入到緩存中的。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章