Hibernate 5 + ZonedDateTime + Postgresql Zeitzone und der Offset

9

Ich habe eine laufende App Spring Boot 1.3 + Hibernate 5 + Java 8 + ZonedDateTime + Postgresql und in einer der Tabellen habe ich die folgenden Felder.

%Vor%

Wenn ich die App starte, sehe ich, dass dies standardmäßig "Zeitstempel ohne Zeitzone"

erzeugt %Vor%

Ich weiß, wenn ich die columnDefinition="TIMESTAMP WITH TIME ZONE" der Spalte hinzufüge, also etwas wie

%Vor%

dann funktioniert es richtig und ich bin in der Lage zu sehen, dass Hibernate eine Spalte mit Zeitzone erstellt hat, aber wenn ich das richtig verstehe, wird das nur für Postgres funktionieren, dh wenn ich morgen die Datenbank in mysql ändere, wird Hibernate einen Fehler auslösen .

Daher lautet meine Frage, wie das im Allgemeinen zu tun ist, d. h., Hibernate anzuweisen, eine Spalte zu erstellen, die die Zeitzone und den Offset enthalten soll. Ich war der Meinung, dass, da der Java-Typ "ZonedDateTime" deliberetelly erstellt wurde, um die Zeitzone und den Zeit-Offset in UTC einzuschließen, Hibernate standardmäßig eine Spalte erstellen wird, die die Zeitzone enthält. Also die Frage wieder, was ist die richtige Art und Weise zu sagen, Winterschlaf die Zeitzone und den Offset enthalten.

Hier sind Teile meines Pom

%Vor%

und meine Eigenschaftendatei mit dem Dialekt

%Vor%     
Tito 30.11.2015, 22:06
quelle

1 Antwort

2

Dieses Problem scheint nur ein Hindernis zu sein, wenn Sie Hibernate für die Erstellung von Schemas verwenden. Wenn alles nach der Erstellung der Spalte als timestamp with time zone auf PostgreSQL gut funktioniert, solltest du einfach mitgehen. Wie auch immer, es ist eine schlechte Übung, Hibernate Ihr Schema generieren zu lassen. Tun Sie es manuell (oder lassen Sie einen DBA das tun). Wenn Sie automatisieren möchten, verwenden Sie ein Datenbankmigrationstool wie Flyway oder Liquibase nachdem eine zuverlässige Person die SQL-Skripte geschrieben hat.

Darüber hinaus klingt die Anforderung "Ändere die Datenbank morgen" wirklich fiktiv, funktional datenbankunabhängig ist mehr oder weniger unrealistisch und wird schwieriger, größere Anwendungen zu schreiben, die ausgeführt werden müssen.

Wenn Sie weitere Informationen zum Verhalten von Hibernate / JDBC-Zeitmarken benötigen, lesen Sie diesen schönen Artikel dazu .

    
Kevin Peters 11.06.2017 15:07
quelle