hibernate 5 + ZonedDateTime + postgresql incluye la zona horaria y el desplazamiento
Tengo una aplicación en ejecución spring boot 1.3 + hibernate 5 + java 8 + ZonedDateTime + postgresql y en una de las tablas tengo los siguientes campos.
@Column(name = "DATE_ENABLED")
@Type(type="java.time.ZonedDateTime")
private ZonedDateTime dateEnabled;
@Column(name = "DATE_DISABLED")
@Type(type="java.time.ZonedDateTime")
private ZonedDateTime dateDisabled;
Si ejecuto la aplicación, veo que esto por defecto produce "marca de tiempo sin zona horaria"
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 |
Sé que si agrego el columnDefinition = "TIMESTAMP WITH TIME ZONE" a la columna, es decir, algo como
@Column(name = "DATE_DISABLED", columnDefinition= "TIMESTAMP WITH TIME ZONE")
entonces funciona correctamente y puedo ver que hibernate creó una columna con zona horaria, pero si entiendo esto correctamente solo funcionará para postgres, es decir, si cambio la base de datos mañana a mysql, hibernate arrojará un error.
Por lo tanto, mi pregunta es cómo hacer eso en general, es decir, decirle a Hibernate que cree una columna que debe incluir la zona horaria y el desplazamiento. Era de la opinión de que, dado que el tipo de Java "ZonedDateTime" se crea deliberadamente para incluir la zona horaria y el desplazamiento de hora en UTC, hibernate creará por defecto una columna que incluya la zona horaria. Por lo tanto, la pregunta nuevamente: ¿cuál es la forma correcta de decirle a Hibernate que incluya la zona horaria y el desplazamiento?
Aquí hay partes de mi 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>
y mi archivo de propiedades que muestra el dialecto
@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");
}
};
}