1. 程式人生 > >hibernate的查詢死鎖

hibernate的查詢死鎖

  今天做了一個操作,先用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,開啟之後,操作成功.