Pregunta

Mis entidades actualmente contiene java Fecha propiedades. Estoy empezando a utilizar Joda Time para la manipulación de fecha y cálculos con bastante frecuencia. Esto significa que estoy constantemente tener que convertir mis fechas en objetos DateTime Joda y vuelta a empezar.

Así que me preguntaba, ¿hay alguna razón por la que no sólo debe cambiar mis entidades para almacenar objetos Joda DateTime en lugar de objetos Date Java?

Tenga en cuenta que estas entidades se conservan a través de Hibernate. He encontrado el JodaTime-hibernación proyecto, pero también estaba leyendo en el correo Joda lista que no era compatible con las versiones más recientes de hibernación. Y parece que no está muy bien mantenido.

Así que me pregunto si sería mejor simplemente continuar la conversión entre DATE y DATETIME, o si sería prudente comenzar la persistencia de objetos DateTime. Mi preocupación es ser dependiente de una biblioteca de mantenimiento deficiente.

Edit: Tenga en cuenta que uno de mis objetivos es estar en mejores condiciones para almacenar información de zona horaria. Almacenar sólo una fecha aparece para salvar a la fecha en la zona horaria local. Como mi aplicación puede ser utilizada a nivel mundial, lo que necesito saber la zona horaria también. Joda Tiempo de hibernación parece abordar esto también en la guía del usuario .

¿Fue útil?

Solución

Creo que el uso de la Joda fecha y hora como el frijol tipo de propiedad es probablemente una buena idea. A continuación, puede tener Hibernate hacer la conversión y guardar la propiedad como el formato de fecha base de datos nativa.

He utilizado personalmente JodaTime-hibernación y no han tenido un problema con él (estamos usando Hibernate 3.2.5GA).

Si usted tiene preocupaciones acerca JodaTime-hibernación, siempre se puede utilizar mecanismo de tipo personalizado de mapeo de Hibernate (que estoy seguro que es todo lo que hace JodaTime-hibernación).

Otros consejos

Joda Time Hibernate puede ser utilizado con los últimos comunicados de Hibernate - es posible que tenga un poco de ajustar su grafo de dependencias eso es todo (exclusiones de ajuste, por ejemplo). ¿Puedo sugerir también nos fijamos en tipo de usuario, que he publicado en Sourceforge. Esto proporciona tipos de usuarios para Joda Time que tienen como objetivo evitar el problema de desplazamiento de cliente que usted ha mencionado. Yo daría la bienvenida a cualquier comentario que tenga en ese proyecto. https://sourceforge.net/projects/usertype/files/

Saludos Chris.

Así que, para resumir:

java.util.Date

  • + soporte nativo en Hibernate
  • - mal API

Joda-Time

  • + mejor API
  • - la falta de soporte nativo en Hibernate

En lo personal, si pudiera mantener el modelo de dominio y "capa de servicio" limpia sólo por el uso de una biblioteca de terceros (aparentemente Tipo de usuario Hibernate para en este caso) y la alternativa sería la de escribir un código extra para hacer la conversión "manualmente" cada vez que era necesario, me gustaría ir con la biblioteca de terceros.

Las fechas no deben ser almacenados usando un alto nivel de abstracción como, por ejemplo, una cadena ( "2009-08-07 07:43:19 ...") ni como objetos Java. Deben ser persistieron como milisegundos desde el tiempo. Tanto el tiempo Joda y el tiempo regular de la fecha de Java le puede dar el tiempo en milisegundos desde la época. Almacenar el número de milisegundos transcurrido y volver a convertir los objetos cuando se está detrás de su base de datos de lectura.

La persistencia Fecha peso pesado objetos en lugar de una larga es un poco como el uso de números de punto flotante para representar cantidades monetarias:. Es típicamente un gran olor código

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top