@DynamicUpdate //自動更新updatetime的問題
@DynamicUpdate //自動更新updatetime
在數據庫中的字節,包括updatetime,但是我更新某一個內容時,updatetime,沒有自動更新,這時候我們隻需要在data類中加上註解 @DynamicUpdate 動態更新的意思
@Entity @DynamicUpdate //自動更新(動態更新)updatetime public class ProductCategory { /*類目Id*/ @Id //主鍵 @GeneratedValue(strategy = GenerationType.IDENTITY) //子增類型 private Integer categoryId; /*類目名字*/ private String categoryName; /*類目編號*/ private Integer categoryType; /*創建時間*/ private Date createTime; /*更新時間*/ private Date updateTime; public Integer getCategoryId(int i) { return categoryId; } public void setCategoryId(Integer categoryId) { this.categoryId = categoryId; } public String getCategoryName() { return categoryName; } public void setCategoryName(String categoryName) { this.categoryName = categoryName; } public Integer getCategoryType() { return categoryType; } public void setCategoryType(Integer categoryType) { this.categoryType = categoryType; } public Date getCreateTime() { return createTime; } public void setCreateTime(Date createTime) { this.createTime = createTime; } public Date getUpdateTime() { return updateTime; } public void setUpdateTime(Date updateTime) { this.updateTime = updateTime; } @Override public String toString() { return "ProductCategory{" + "categoryId=" + categoryId + ", categoryName='" + categoryName + '\'' + ", categoryType=" + categoryType + '}'; } }
@DynamicUpdate 註解使用及註意事項
使用場景
平時在寫業務時, 會涉及到某條數據的更新。 當我們使用hibernate的 this.getCurrentSession().saveOrUpdate(o) 更新對象時,會默認的更新對象(o)所有的字段,包括屬性為null和未修改的字段也會更新到原有的數據庫表中。
造成瞭原有的數據丟失或數據重復修改。
通常這情況下我們所希望的是僅更新對象(o)中修改過且有值的字段,此時就需要用到@DynamicUpdate註解。
註解使用
標註位置: 實體映射類上
註意事項
根據官方接口文檔所說,如果我們在使用該註解時必須同時使用 @SelectBeforeUpdate 註解表明在更新前先進行查詢操作。否則是即使聲明該註解也是無效的。
個人理解:
也就是說當我們要更新的對象不在session會話的管理中,無法比對哪個字段需要更新,則所標註的註解無效。故需要在其更新前進行查詢,此時當前數據已經在sessio的會話中,即可動態更新數據。
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- @RequestBody不能映射到對象的解決
- SpringBoot2 JPA解決懶加載異常的問題
- MP(MyBatis-Plus)實現樂觀鎖更新功能的示例代碼
- linq中的連接操作符
- Entity Framework導航屬性介紹