hibernate的查詢死鎖
阿新 • • 發佈:2019-01-28
今天做了一個操作,先用hibernate進行查詢,在查詢集合list的迴圈中又執行 按上一個查詢結果做條件的一個更新操作,我先是用Query載入sql語句,再用Query.executeUpdate去執行,結果拋除異常並且進入死鎖狀態,查了很多資料,有點收穫.
Hibernate在 update持久物件的時候,產生的sql語句是把所有的屬性統統set一遍,這樣會造成update操作效率很低。Hibernate預設情況下總是在初始化的時候靜態生成sql語句,因此不能動態update。但是Hibernate也可以配置為動態產生update和insert語句。
<class name="ClassName" table="tableName" dynamic-update="true|false" > dynamic-insert="true|false" />
當設為true的時候,Hibernate在執行期動態產生sql語句,對於insert來說,只插入那些不是null的屬性,這樣就可以支援資料庫欄位的default屬性;對於update來說,只更新那些修改過的屬性。
加入上邊這段程式碼,然後我不在執行迴圈中的查詢操作直接用vo物件去set這個要修改的值,再session.update(vo);
沒有報錯,但是資料庫中沒有值,找了半天發現沒有啟用Transaction,開啟之後,操作成功.