web-dev-qa-db-fra.com

Persistez DateTime de Joda-time via Hibernate

J'utilise Jodatime dans mon application Play, mais je dois actuellement faire un tas de conversion dans les deux sens de/vers Java.util.Date et Java.sql.Time.

Étant donné que le jodatime est inclus dans la distribution Play, je pense qu'il y a probablement une meilleure façon de le faire. Existe-t-il un moyen de rendre mes champs de modèle DateTimes au lieu de Java.util.Date et Java.sql.Time donc la conversion se fait automatiquement? Y a-t-il une autre façon de rationaliser cela?

42
Brad Mace

Pour Hibernate 3, ajoutez l'annotation suivante à votre champ de date:

@Type(type="org.joda.time.contrib.hibernate.PersistentDateTime")

Hibernate va maintenant faire le sale boulot pour vous.

(Assurez-vous d'avoir joda-time-hibernate.jar dans votre chemin de classe)

MISE À JOUR:

Pour Hibernate 4 et 5, ajoutez l'annotation suivante:

@Type(type="org.jadira.usertype.dateandtime.joda.PersistentLocalDateTime")

(Assurez-vous d'avoir jadira-usertype-core.jar dans votre chemin de classe)

53
Kees de Kooter
  1. Joda recommande d'utiliser les bibliothèques UserType avec Hibernate 4.0, la version d'Hibernate fournie avec Play 1.2.x (voir: http://joda-time.sourceforge.net/contrib/hibernate/index.html ).

  2. La bonne façon de gérer la dépendance utilise le dependencies.yml fichier, y compris une ligne comme celle-ci:

    - org.jadira.usertype -> usertype.jodatime 2.0.1
    
10
Samuel

Au lieu de mettre le @Type annotation sur chacune de vos propriétés Joda, vous pouvez l'ajouter dans vos propriétés jpa

#Hibernate config
jadira.usertype.autoRegisterUserTypes=true

et cela devrait très bien fonctionner.

ps. jadira-usertype-core.jar devrait être dans votre chemin de classe.

7
naXa

Nous devrions activer deux jars dans le projet Hibernate 4:

  • compiler ("joda-time: joda-time: 2.8")
  • compiler ("org.jadira.usertype: usertype.jodatime: 2.0.1")
0
Zhe