2013-10-26 47 views
1

我有一個用例,其中包含表的主鍵的持久對象只有幾個更新字段。在這種情況下,我只想用這些字段更新行。我發現hibernate並不提供任何解決方案,所以我自己編寫了一個方法,它使用反射來確定對象的所有非空字段,並基於此創建更新查詢並最終執行它。我的應用程序是使用spring框架編寫的。到目前爲止,我做到這一點的方式是,我有一個單獨的具有更新方法的util類,它使用會話對象,主鍵,主鍵值和表名。這是實現這個用例的好方法嗎?任何建議,使這更好​​?只更新休眠中的對象的非空字段

+0

爲什麼你只想更新這些字段? – 2013-10-26 10:03:34

回答

0

你的問題不清楚給我。爲了更新,你可以做一個選擇,然後保存它。或者只是創建該實體並保存它(主鍵在這裏是必需的)。既然你想更新,你可以使用第一種方法。這裏不需要打擾強制性領域。

+0

您的解決方案將導致執行2個查詢:首先選擇然後更新。我想在一個查詢本身做更新。這就是我這樣做的原因。 – coder

+0

您可以將所有非空值傳遞給構造函數。因此,只有在所有非空字段都具有值的情況下,才能創建持久性對象。 – MadhavC

+0

可以說我有一個用戶類,它的名字,姓氏和中間名,ID作爲字段。如果我只想更新名字,我會用firstname和id創建用戶對象。現在,如果我執行session.saveorupdate(用戶),則姓名和中間名將在數據庫中設置爲空。這不是我想要的。我想只更新db中的名字,因爲它保持姓和中間名。 – coder

0

由於在實體的POJO中使用了原始數據類型,因此大多數時間導致將實體的可空字段中的默認值保存爲持久的原因之一。
請檢查你是否沒有使用任何基元。如果是切換到相應的包裝類,然後保存。保存或更新後,它應該將null傳遞給數據庫。
希望這可以解決您的問題:)