我在我的表中有一個createdAt
列,我不想在第一次創建後更新它。因此我在其定義中標記爲updatable=false
。但是,當我使用hibernate的更新方法時,它正在更新。當我檢查hibernate更新查詢日誌時,我發現createdAt字段未包含在更新查詢中,但它仍會被更新。這裏是我使用的代碼(我使用休眠4)可更新錯誤列正在更新
- EDIT-- 我使用mysql作爲數據庫,顯然mysql工作臺添加CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
屬性默認爲timestamp列。通過hibernate刪除ON UPDATE CURRENT_TIMESTAMP
更新問題得到解決。
這裏是列定義
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "createdAt", nullable = false, length = 19, updatable = false)
public Date getCreatedAt() {
return createdAt;
}
這裏是更新方法:
Session session = null;
try {
session = currentSession();
session.beginTransaction();
session.update(user);
commitTransactionOfGivenSession(session);
} catch (HibernateException exc) {
logRollbackAndThrowHibernateException(exc, session);
} finally {
closeSession(session);
}
休眠登錄其不包括createdAt
字段
update
example_schema.Users
set
lastLogin=?,
lastNotifiedAt=?,
userName=?,
waitingSince=?
where
userId=?
什麼DBMS,以及如何在數據庫上定義列?是否有任何會導致列更新的表上的觸發器? – DaveH
我正在使用mysql並將字段定義爲TIMESTAMP。現在我看到有一個默認值是由mysql「CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP」自動生成的。我試圖刪除這個,但MySQL似乎忽略了我的改變。 – cubbuk