hibernate 5 + ZonedDateTime + postgresql inklusive Zeitzone und Offset
Ich habe eine laufende App Spring Boot 1.3 + Ruhezustand 5 + Java 8 + ZonedDateTime + Postgresql und in einer der Tabellen habe ich die folgenden Felder.
@Column(name = "DATE_ENABLED")
@Type(type="java.time.ZonedDateTime")
private ZonedDateTime dateEnabled;
@Column(name = "DATE_DISABLED")
@Type(type="java.time.ZonedDateTime")
private ZonedDateTime dateDisabled;
Wenn ich die App starte, sehe ich, dass dies standardmäßig "Zeitstempel ohne Zeitzone" ergibt
testDB=# \d type
Table "public.type"
Column | Type | Modifiers
--------------------------------+-----------------------------+-----------
type_id | bytea | not null
date_disabled | timestamp without time zone |
date_enabled | timestamp without time zone |
Ich weiß, dass, wenn ich die columnDefinition = "TIMESTAMP WITH TIME ZONE" zur Spalte hinzufüge, d. H. So etwas wie
@Column(name = "DATE_DISABLED", columnDefinition= "TIMESTAMP WITH TIME ZONE")
dann funktioniert es richtig und ich kann sehen, dass der Ruhezustand eine Spalte mit Zeitzone erstellt hat, aber wenn ich das richtig verstehe, funktioniert dies nur für Postgres, d. h. wenn ich morgen die Datenbank auf mysql ändere, wird der Ruhezustand einen Fehler auslösen.
Thus meine Frage ist, wie man das im Allgemeinen tut, d. H. Dem Ruhezustand mitteilt, eine Spalte zu erstellen, die die Zeitzone und den Versatz enthalten sollte. Ich war der Meinung, dass, da der Java-Typ "ZonedDateTime" absichtlich so erstellt wurde, dass er die Zeitzone und den Zeitversatz in UTC enthält, im Ruhezustand standardmäßig eine Spalte erstellt wird, die die Zeitzone enthält. Also nochmal die Frage: Was ist der richtige Weg, um den Ruhezustand anzuweisen, die Zeitzone und den Versatz einzuschließen.
Hier sind Teile von meinem Pom:
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.0.RELEASE</version>
<hibernate.version>5.0.4.Final</hibernate.version>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-java8</artifactId>
<version>${hibernate.version}</version>
</dependency>
und meine Eigenschaftendatei mit dem Dialekt
@Bean
public Properties hibernateProperties() {
return new Properties() {
{
setProperty("hibernate.dialect", "org.hibernate.dialect.PostgreSQLDialect");
setProperty("hibernate.chach.provider_class", "org.hibernate.cache.NoCacheProvider");
setProperty("hibernate.show_sql", "true");
setProperty("hibernate.hbm2ddl.auto", "create-drop");
}
};
}