2012-08-02 78 views
0

我正在做一個saveOrUpdate但我面臨的問題是它覆蓋已經在表中的舊數據。休眠保存或更新覆蓋舊數據

我有一個表,其中有一個相關ID作爲關鍵,並反對該ID我先堅持一些數據,然後再次對同一個ID傳遞一個確認消息在同一個表中的另一列稍後。但是這會覆蓋我在表中的舊數據,而我得到的是一個空表,其ID爲&消息,其他列無效。

我使用Hibernate映射文件(的.hbm.xml)

建議如何保持舊的數據,只是只更新一列?

更新:

當試圖加載持久比如我正在此:

SEVERE: IllegalArgumentException in class: common.entity.AbstractDetailsKey, getter method of property: correlationId 
... 
org.hibernate.PropertyAccessException: IllegalArgumentException occurred calling getter of common.entity.AbstractDetailsKey.correlationId 
... 
Caused by: java.lang.IllegalArgumentException: 666 

回答

3

你是第一次加載實體,更新和保存過嗎?或者你只是創建一個實體實例,把你想要的id放在那裏,然後在空實例上改變一個屬性?這很糟糕,因爲你剛剛告訴你的ORM,具有id X的實體現在只有一個屬性帶有值,所以當然它會清空所有其他列的值。

聽起來像是你需要或者

1)裝載的行,然後使修改,然後saveOrUpdate
2)使用HQL來只更新一列。

+1

加載該行,然後進行更改是我的想法,但如果在休眠配置中有其他解決方案,我不知道它會更好。我有一個實體班,你有我。 – 2012-08-02 20:18:24

+0

我知道沒有映射解決方案,您可以使用hql來更新一列。我不認爲你會找到一個映射解決方案,你想要的似乎與ORM的工作方式是對立的。 – hvgotcodes 2012-08-02 20:24:08

+1

我已經更新了加載持久性實例時遇到的錯誤。我不明白我出錯的地方。 – 2012-08-03 02:27:44