HIbernate_性能調優

1.大數據量重複填充session時,應該在每次調用之後調用session.clear();

 

2.1+N問題(由Fetch=Eager造成,會發出N個sql調用)的解決方法:

  1).將Fetch設爲Lazy

  2).調用session.createCriteria(class),因爲這個默認會做左連接。不會發出N的SQL調用。

  3).使用@BatchSize(size=xxx)(注意需要放到N的類頭上),可以讓1+N問題變爲1+N/2,1+N/3,1+N/4.......,這取決於你設定size的大小。

  4).在HQL中寫left join fetch(right join fetch).比如session.createQuery("from xxx  t from left join fetch xxx c")。這樣就會只有一條使用了left join 的sql文。

 

3.List Iterator的區別

  1).List把所有都取出來,iterator會先取主健,等到用到其他屬性的時候,再根據取出來的主健取屬性的值。一般情況下用list,因爲iteratore會使用session級的緩存,在特別情況下才使用。

  2).正是由於iterator會使用session級的緩存,所以當在一個session內部重複使用結果的時候,iterator不會再去取了,list就不會,實際情況中,如果確實想用的話,可以第一次用list往內存放,再使用的時候用iterator,就不會再去數據庫裏取了。

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