実行中のアプリ spring boot 1.3 + hibernate 5 + Java 8 + ZonedDateTime + postgresql があり、テーブルの 1 つに次のフィールドがあります。
@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 |
columnDefinition= "TIMESTAMP WITH TIME ZONE" を列に追加すると、つまり次のようなことがわかります
@Column(name = "DATE_DISABLED", columnDefinition= "TIMESTAMP WITH TIME ZONE")
その後、正しく動作し、休止状態がタイムゾーンで列を作成したことを確認できますが、これを正しく理解していれば、これは postgres でのみ機能します。つまり、明日データベースを mysql に変更すると、休止状態はエラーをスローします。
したがって、私の質問は、一般的にそれを行う方法です。つまり、タイムゾーンとオフセットを含める必要がある列を作成するように休止状態に指示することです。Javaタイプの「ZonedDateTime」はタイムゾーンとUTCの時間オフセットを含むように意図的に作成されているため、休止状態はデフォルトでタイムゾーンを含む列を作成するという意見でした。したがって、もう一度質問します。休止状態にタイムゾーンとオフセットを含めるように指示する適切な方法は何ですか。
これが私の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");
}
};
}