mam tych dwóch klasKopiowanie TIMESTAMP do DATETIME na 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;
}
Przy użyciu Hibernate, przypisać
destination.myInstant = source.myInstant;
a następnie zapisana wartość jest mniejsza o jedną godzinę niż oryginał - zarówno zgodnie z klientem MySQL z linii poleceń, jak i Java. Moja aktualna strefa czasowa to UTC + 1, więc powodem jest oczywiście konwersja strefy czasowej.
Jest kilka miejsc, w których można to naprawić, ale szukam najlepszej praktyki. Serwer powinien działać na całym świecie, więc powinien nadal używać UTC wewnętrznie, prawda?
Czy powinienem zmienić typ kolumny na TIMESTAMP
? Dlaczego domyślnie Instant
jest mapowane na DATETIME
?
Według this article, Instant
robi mapę do TIMESTAMP
, ale w moim przypadku tak się nie stało. Czemu?
Proszę podać 'SHOW CREATE TABLE' i SQL wygenerowany z Hibernate. –
@RickJames Nie ma tam nic ciekawego: 'SHOW CREATE TABLE' pokazuje typy takie jak' timestamp (3) NOT NULL DEFAULT '2016-01-01 01: 00: 00.000' i 'datetime'. Wyrażenia są prostym wyborem i aktualizacją bez logiki. Wartości nie zostały zarejestrowane. Mimo to bym opublikował log, ale musiałbym zastąpić prawdziwe nazwy klas i pól przez te, których użyto w moim pytaniu, a to nie jest tego warte, ponieważ tam naprawdę nic nie ma. – maaartinus
'POKAŻ ZMIENNY JAK"% zone% ";' –