我現在試圖通過使用 "getById & save "來更新物體的列,如下所示。
// update "title" column
val entityRef = entityRepository.getById(entityID)
entityRef.title = futureTitle
return entityRepository.save(entityRef)
但是,如果我運行這段代碼,更新的時間戳列(描述為CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP)并沒有改變,盡管該列已經被完美地更新。
似乎只有當我使用自定義的 "UPDATE "查詢時,updatedtimestamp列才會更新。
@Modifying
@Transactional
@Query("update Entity p set p.title = :newTitle where p.id = :entityId")
fun updateEntityTitle( entityId: Long, newTitle: String)
我想知道為什么通過 "getById & save "更新物體時,沒有對updatedtimestamp進行修改?
謝謝你!
uj5u.com熱心網友回復:
ON UPDATE CURRENT_TIMESTAMP是MySql的SQL方言的一個結構。它的描述如下在檔案中:
當行中任何其他列的值與當前值發生變化時,自動更新列會自動更新為當前的時間戳。如果所有其他列被設定為當前值,自動更新的列將保持不變。要防止一個自動更新的列在其他列發生變化時被更新,明確地將其設定為當前值。要想在其他列沒有變化的情況下更新一個自動更新的列,明確地將其設定為它應該有的值(例如,將其設定為CURRENT_TIMESTAMP)。
由于所有的JPA實作都會更新所有的列,無論它們是否改變,它們也會為你的CURRENT_TIMESTAMP列提供一個值,從而防止任何自動更新,如檔案中所述。
你有各種方法來獲得這個技術堆疊的更新時間戳:
你有各種方法來獲得這個技術堆疊的更新時間戳:
你可以使用動態插入來只更新發生變化的欄位。請注意,在大多數情況下,這對性能是不利的。參見Hibernate。臟檢查和只更新臟屬性?
你可以通過使用@Column(updatable=false)使該列只讀。參見JPA的只讀映射
或者你使用JPAs EntityListener。
既然你似乎使用了Spring Data JPA,你也可以使用Spring Datas @LastModifiedDate。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/317520.html
標籤:
