Voy a añadir esto como una respuesta por separado, ya que es en mi opinión, la información importante para cualquiera que cambia a Hibernate 4, y en la necesidad de migrar a la utilización de tipos temporales persistentes de Jadira . Esta página está altamente clasificada en los resultados de búsqueda de Google para hibernate 4 y jodatime, así que la agregaré aquí. (Para una discusión separada de este tema, vea: Joda time DateTime incorrectly stores in database)
Si se encuentra en una zona horaria distinta a UTC, se necesita una configuración importante para obtener el mismo comportamiento que con una hibernación joda-time tipo de soporte. La forma en que los tipos temporales de jadira funcionan de manera predeterminada es mediante la conversión de todos los valores a la zona horaria UTC antes de continuar en la base de datos y la conversión a la zona horaria del sistema al cargar los valores de la base de datos.
Me quedé quemado después de la actualización, cuando tenía muchas marcas de tiempo con mi zona horaria exacta en la base de datos (UTC + 1 (+2 cuando en verano)). Cuando se cargó después de actualizar a Hibernate 4, 1 o 2 horas (dependiendo de si la marca de tiempo fue durante el horario de verano) se agregó al valor en la base de datos, lo que significa que todas las marcas de tiempo existentes se presentaron erróneamente. Además, los nuevos valores de marca de tiempo se almacenaron en la base de datos con la zona horaria UTC, lo que los llevó a aparecer correctamente en la aplicación, pero incorrecto en la base de datos.Con todo, un lío de zonas horarias y marcas de tiempo calientes.
Por lo tanto, con el fin de conseguir el mismo comportamiento que con Joda-tiempos de hibernación de soporte (la fecha y hora que se persistió siendo de la zona horaria del servidor en cuestión, y las marcas de tiempo en la base de datos es el mismo que lo que se está cargando en la aplicación), las siguientes propiedades se deben agregar a la configuración JPA/Hibernate (en mi caso, hibernate.properties
):
jadira.usertype.autoRegisterUserTypes=true
jadira.usertype.databaseZone=jvm
jadira.usertype.javaZone=jvm
Esto se asegurará de que las marcas de tiempo en la base de datos serán de la misma zona horaria como la de la aplicación, que a su vez será la zona horaria de la jvm (en la mayoría de los casos, el reloj del servidor de aplicaciones).
Además, por lo que entiendo, la autoRegisterUserTypes
-property elimina la necesidad de que el @Type
-annotation para una selección de tipos comunes, entre ellas las JodaTime tipos DateTime
y LocalDate
.
Usted acaba de decirnos que * sí * trabajaron juntos, ¿no? – skaffman
@skaffman No he probado nada más que la creación de columnas ... tenía entendido que las versiones anteriores (de joda-time lib) tenían que recompilarse contra la versión más reciente de hibernate. Esto sonó una alarma, de ahí la pregunta ... – NimChimpsky
No están felizmente casados, Hibernate está teniendo otras relaciones ... y joda ...:/... Ella está herida – nobalG