@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。

推薦閱讀: