Re: [問題] hibernate的新手問題

看板java作者 ( )時間11年前 (2012/12/18 00:04), 編輯推噓1(103)
留言4則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《kevindd (gg)》之銘言: : 最近在用hibernate但是有些不太懂的地方 : 我看文件說明要求session per request不鼓勵session per operation : 但是我不太清楚session per request的定義 其實 session per request / session per operation 並不是什麼專有名詞,它比較像 在建議你,要怎樣用才會比較有效率的使用程式裡的資源。以你的問題來講,資源就是指 你每次要存取 DB 所開啟的 hibernate session。畢竟 Database 是個外部資源,總是比 較吃資源和耗費時間。 舉個例來講 : 你的程式是一個討論區 web application。 使用者在寫完一篇文章時,按下新增時,你的程式會做兩件事 : 1. 將使用者的文章存入 DB。 2. 更新 DB 裡資料統計結果,例如使用者總文章數。 Java method 可能會像這個樣子 public void createPost(Post post) { // Insert post into Database ... // Update statistics data ... } request 就如同呼叫 createPost(),operation 就如新增 Post 和更新統計資料。 假設程式裡沒有使用 Connection Pool ,也沒有做 Transaction 管理。每個 operation 都會自己去開啟 session,做完後就關掉。這樣子等於每呼叫 createPost() 一次就會有 兩個 session 建立起來又關閉。 程式很小或使用的人少時可能感覺還好。但只要程式開始成長,operation 變多,變複雜 的時候,session 就會不斷的被開啟又關閉,甚至是被一直留住直到所有 operation 結束 才關掉,這些多拿的 session 是非常浪費系統資源的,甚至沒兩下就 Connection 最 大值吃光,因為都佔著不放。 因此它才會說,一個 request 用一個 session 為佳。 : 舉例來說 我建立1個session後 針對同樣db但table不同的query重複使用session : 一直到沒有queryStr後才執行session.close() : 這樣有符合session per request嗎? : 如果queryStr有很多筆 不會有out of memory問題嗎? 前後這兩句沒有什麼關聯,所以我也不曉得要怎麼回答你。但是大量的DB操作通常也都有 另外的實作方式。 : 還有另一個問題 : 下面程式片段中session2的openSession()和close()是否要放在while loop裡才合理? 見前面解釋 -- We who cut mere stones must always be envisioning cathedrals. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.35.186.241

12/18 00:32, , 1F
多謝回答 可以提一下大量DB操作的實作方式嗎?或者是
12/18 00:32, 1F

12/18 00:33, , 2F
resourse 我在書上只看到用分頁 不過好像是
12/18 00:33, 2F

12/18 00:34, , 3F
resultSet太大的解決問題
12/18 00:34, 3F

12/19 00:06, , 4F
google
12/19 00:06, 4F
文章代碼(AID): #1GpqAUuc (java)
文章代碼(AID): #1GpqAUuc (java)