hibernate 5 + ZonedDateTime + postgresql incluem o fuso horário e o deslocamento
Eu tenho um aplicativo em execução spring boot 1.3 + hibernate 5 + java 8 + ZonedDateTime + postgresql e em uma das tabelas eu tenho os seguintes 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;
Se eu executar o aplicativo, vejo que isso, por padrão, produz "carimbo de data e hora sem fuso horário"
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 |
Eu sei que se eu adicionar o columnDefinition = "TIMESTAMP WITH TIME ZONE" à coluna, ou seja, algo como
@Column(name = "DATE_DISABLED", columnDefinition= "TIMESTAMP WITH TIME ZONE")
então ele funciona corretamente e eu consigo ver que o hibernate criou uma coluna com fuso horário, mas se eu entendi corretamente, isso funcionará apenas para o postgres, ou seja, se eu mudar o banco de dados amanhã para o mysql, o hibernate emitirá um erro.
Portanto, minha pergunta é como fazer isso em geral, ou seja, dizer ao hibernate para criar uma coluna que deve incluir o fuso horário e o deslocamento. Eu achava que, como o tipo java "ZonedDateTime" foi criado deliberadamente para incluir o fuso horário e o horário no UTC, o hibernate criará, por padrão, uma coluna que inclui o fuso horário. Assim, a pergunta novamente: qual é a maneira correta de dizer ao hibernate para incluir o fuso horário e o deslocamento.
Aqui estão partes do meu 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>
e meu arquivo de propriedades mostrando o dialeto
@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");
}
};
}