我有這兩個類複製TIMESTAMP到DATETIME關於MySQL與Hibernate
class Source {
// mapped to TIMESTAMP
@Version
@Column(columnDefinition="TIMESTAMP(3) DEFAULT '2016-01-01'")
Instant myInstant;
}
class Destination {
// mapped to DATETIME
@Basic(optional=true)
Instant myInstant;
}
當使用休眠,我分配
destination.myInstant = source.myInstant;
,然後將存儲的值比原來的1小時較小 - 根據命令行MySQL客戶端和Java。我目前的時區是UTC + 1,所以原因顯然是時區轉換。
有幾個地方這可以修復,但我正在尋找最佳實踐。服務器應該在全球範圍內工作,所以它應該繼續在內部使用UTC,對吧?
我應該只是將列類型更改爲TIMESTAMP
?那麼,爲什麼Instant
默認映射到DATETIME
?
據this article,Instant
確實地圖TIMESTAMP
,但在我的情況下,它沒有。爲什麼?
請提供'SHOW CREATE TABLE'和Hibernate生成的SQL。 –
@RickJames這裏沒有什麼有趣的東西:'SHOW CREATE TABLE'顯示類似'timestamp(3)NOT NULL DEFAULT'2016-01-01 01:00:00:00和'datetime'。這些陳述僅僅是簡單的選擇和更新,沒有邏輯背後。這些值沒有被記錄。無論如何,我會發布日誌,但我不得不用我的問題中使用的替換真正的類和字段名稱,這是不值得的,因爲那裏沒有任何東西。 – maaartinus
'SHOW VARIABLES LIKE'%zone%';' –