2012-01-10 61 views
2

目前,我有一個Hibernate的實體類如下:當只有非時間戳字段被修改時,我可以配置Hibernate/JPA更新實體記錄嗎?

@Entity 
@Table(name = "entity") 
public class Entity implements Serializable { 

    private static final long serialVersionUID = 2040757598327793105L; 

    @Id 
    @Column 
    private int id; 

    @Column 
    private String data;  

    @Column(name = "last_modified") 
    @Temporal(TemporalType.TIMESTAMP) 
    private Date lastModified; 
} 

我發現,即使在非時間戳字段不被修改(即data場),以merge呼叫仍然更新時間戳。我希望時間戳只在其他數據字段發生更改時才更新。

是否有反正我可以防止調用merge當所有其他數據字段沒有修改,或者我必須在代碼中明確檢查這個自己嗎?

回答

3

更新(感謝評論):

由於休眠的V4 @Entity註釋已被棄用,允許動態更新,則應該(與@SelectBeforeUpdate(true)結合)使用@DynamicUpdate(true)


如果你想防止未修改的字段包含在UPDATE查詢中,請將其添加到您的實體中:

@org.hibernate.annotations.Entity(dynamicUpdate=true) // update only changed fields 
public class ... 
+0

是否沒有JPA prope rty爲此還是必須使用@Entity註釋的hibernate版本? – 2012-01-11 11:23:23

+1

你必須同時使用兩者。沒有JPA標準AFAIK – Bozho 2012-01-11 11:51:51

+0

慚愧,但感謝您的信息。 – 2012-01-11 13:30:38

相關問題