2012-08-10 72 views
0

我想複製和診斷用戶的問題,請耐心等待。我一直無法自己複製這個問題。休眠將數據庫列重置爲默認值?

讓「用戶」成爲普通舊Java對象(PO​​JO):Java中的類和SQL中的表。我的猜測/懷疑,如果你運行一個Hibernate事務中執行以下操作:

User user = (User) hsi.s.load(User.class, userId); 
user.setProperty(value); // this updates one value in this row of the database table 

然後休眠或SQL有時重置「用戶」的特性爲默認值。這是我所能看到的唯一解釋,儘管我承認自己無法重現這個問題。

有沒有人聽說過這樣的事情發生,其中Hibernate或SQL重置屬性到其默認值?謝謝你的幫助!

+0

你有沒有試過做session.saveorupdate(user);修改POJO值後? – Patton 2012-08-10 06:37:38

+0

Patton,saveOrUpdate不應該是必需的,因爲該對象已經與Hibernate會話關聯 – iloveponies 2012-08-12 02:58:49

回答

1

不可以。很難說「不」,因爲很難證明某些事情不存在而不是證明某件事存在,但我相信這是正確的答案:-)除非你有代碼它將字段設置回它們的默認值,Hibernate將永遠尊重你的數據庫中的內容。意思是說,如果你真的有一個POJO沒有擴展任何其他類,它在默認的無參數構造函數中沒有任何內容,它唯一的作用是爲屬性提供getters/setter,並且你沒有其他代碼例如聽衆)改變它,那麼Hibernate將這些值設置爲「返回」到它們的默認值是沒有辦法的。

如果這真的發生了,這裏是我如何找到有問題的代碼的建議:

1)建立一個新的項目,用一個簡單的persistence.xml文件,你的POJO和一個Java類,它可以從命令行運行,並將檢索,打印和更新pojo中的屬性。如果定義了非默認值,則應將值而不是重置爲默認值。如果這仍然發生,請檢查數據庫中的觸發器。

2)下載Hibernate源代碼並啓動一個調試器。步入每條指令,除了那些涉及JVM的指令(在這種情況下,這些指令不會有太大的幫助)。也許你會在某個地方找到一個偵聽器,或者在助手中找到一個代碼,或者其他正在執行的東西,但是你不知道。