我有一個正在運行的應用程序春季啓動1.3 +休眠5 + Java 8 + ZonedDateTime + postgresql和其中一個表我有以下字段。hibernate 5 + ZonedDateTime + postgresql inlcude時區和偏移量
@Column(name = "DATE_ENABLED")
@Type(type="java.time.ZonedDateTime")
private ZonedDateTime dateEnabled;
@Column(name = "DATE_DISABLED")
@Type(type="java.time.ZonedDateTime")
private ZonedDateTime dateDisabled;
如果我運行的應用程序,然後我看到,這個默認情況下會產生「時間戳沒有時區」
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 |
我知道,如果我「WITH TIME ZONE TIMESTAMP」添加columnDefinition =到列即像
@Column(name = "DATE_DISABLED", columnDefinition= "TIMESTAMP WITH TIME ZONE")
那麼它正常工作,我能夠看到休眠創造了時區的一列,但如果我理解正確這這將是唯一的工作postgre即,如果我明天將數據庫更改爲mysql,那麼hibernate會拋出一個錯誤。
因此,我的問題是如何做到這一點,即通知hibernate創建一個應包含時區和偏移量的列。我認爲,由於Java類型的「ZonedDateTime」被創建爲包含UTC中的時區和時間偏移量,因此休眠將默認創建一個包含時區的列。因此,再次提出問題是什麼才能讓hibernate包含時區和偏移量。
這裏是我的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>
和我的財產的部分文件顯示方言
@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");
}
};
}