Ho un'app di avvio della molla in esecuzione 1.3 + hibernate 5 + java 8 + ZonedDateTime + postgresql e in una delle tabelle ho i seguenti campi.hibernate 5 + ZonedDateTime + postgresql inlcude fuso orario e lo scostamento
@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 faccio funzionare l'applicazione poi vedo che questo di default produce "timestamp senza fuso orario"
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 |
so che se aggiungo il ColumnDefinition = "TIMESTAMP WITH TIME ZONE" al colonna vale a dire qualcosa come
@Column(name = "DATE_DISABLED", columnDefinition= "TIMESTAMP WITH TIME ZONE")
allora funziona correttamente e sono in grado di vedere che Hibernate ha creato una colonna con il fuso orario, ma se ho capito bene questo sarà solo lavorare per Postgre s se io cambio il database domani a mysql allora l'ibernazione genera un errore.
Quindi la mia domanda è come fare, in generale, vale a dire per raccontare ibernazione per creare una colonna che dovrebbe includere il fuso orario e l'offset. Ero del parere che in quanto il tipo java "ZonedDateTime" viene deliberetelly creata per includere il fuso orario e la differenza di fuso orario in UTC poi Hibernate per default creare una colonna che includono il fuso orario. Quindi la domanda di nuovo qual è il modo corretto di dire in ibernazione per includere il fuso orario e l'offset.
qui sono parti del mio 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 le mie proprietà dei file che mostra il dialetto
@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");
}
};
}