springboot servertimezone property annotation java mysql hibernate timezone timestamp

java - servertimezone - Hibernar forzar la marca de tiempo para que persista/cargue como UTC



springboot timezone (2)

obtener clase clase public class UtcTimestampType extends TimestampType desde su enlace
y haz este código

@org.hibernate.annotations.Type(type = "yourPackage.UtcTimestampType") public java.util.Date date;

usando anotaciones

o

<property name="date" column="yourColumn" type="yourPackage.UtcTimestampType" />

utilizando * .hbm.xml

Esta pregunta ya tiene una respuesta aquí:

Estoy usando java, mysql, hibernate (3.6.x). En el lado de Java, estoy usando objetos java.sql.Timestamp. En el lado mysql estoy usando columnas datetime.

Quiero hibernar para guardar / cargar estos objetos de marca de tiempo utilizando la zona horaria UTC independientemente de la zona horaria del sistema / java / mysql.

Encontré " Cómo almacenar la fecha / hora y las marcas de tiempo en la zona horaria UTC con JPA e Hibernate ", que era informativo pero que carecía de información de implementación final que estoy luchando por encontrar.

Quiero implementar un UtcTimestampTypeDescriptor como se muestra en ese hilo y configurar hibernación para usar esto en lugar del TimestampTypeDescriptor normal.

¿Cómo puedo configurar la hibernación para usar el tipo UtcTimestamp en lugar del tipo predeterminado de marca de tiempo?


Solo para MySQL , una alternativa a la implementación de tipos de Hibernate personalizados es agregar las siguientes opciones JDBC a su URL de conexión JDBC:

useTimezone=true serverTimezone=UTC

Esto forzará su conexión JDBC a la zona horaria UTC y le pedirá a MySQL que realice conversiones de la zona horaria JVM. El efecto neto es que puede mantener una zona horaria local en su JVM (por ejemplo, para imprimir mensajes de registro, etc.), mientras que las columnas DATETIME se mantendrán como UTC.

Por ejemplo:

<bean id="hibernateAnalysisSessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> <property name="hibernateProperties"> <props> <!-- Connection parameters --> <prop key="hibernate.connection.driver_class">com.mysql.jdbc.Driver</prop> <prop key="hibernate.connection.url">jdbc:mysql://hostname/databaseName?useTimezone=true&amp;serverTimezone=UTC</prop> ...