JPA TemporalType.Date à date erronée

J'ai une classe qui a un champ de date représentant une "valable à partir de la" date pour un élément de données. Il est défini comme ceci:

@Temporal( TemporalType.DATE )
private Date validFrom;

Tout semble bien fonctionner jusqu'au point où je tire la date à partir de la base de données et l'afficher. Si je sélectionne la date 18-Sep-2003 à l'extrémité avant de l'enregistrer quand je vérifie dans la base de données assez sûr que c'est la date de la tenue (la base de données est MySQL 5.5.9 colonne est de type DATE). Cependant quand j'ai tirer vers le haut une liste des dossiers la date indiquée est le 17 septembre 2003 - un jour plus tôt.

Si je choisis une date de début ou de la fin de l'année comme la 26 Mar 2003 ou 25 Décembre 2003, tout est parfait donc je deviner que c'est quelque chose à voir avec l'heure d'été, mais où est l'erreur rampante? Depuis la base de données semble tenir le bon jour, je devine que ça doit être quand JPA est la conversion de retour en java.util.Date - est de java.util.Date de la meilleure classe à utiliser pour une date? J'ai vu quelques exemples de cas où les gens utilisent le Calendrier, mais qui semble assez lourd de poids et je ne suis pas sûr de savoir comment il va travailler avec un JSF frontal.

Ce n' Date résoudre? J'espère java.util.Date (correct) et pas java.sql.Date? La simple raison est que, quand vous écrivez des entités, la JPA est d'essayer de mapper les propriétés d'entité de colonnes de base de données (et de genre) et java.sql.Date est déjà mappé type. Si vous devez utiliser java.util.Date. Veuillez également noter que, par exemple, p:calendar (PrimeFaces) exige de la java.util.Date et pas java.util.Calendar (je suis tombé sur ça par moi-même). Voir: javabydeveloper.com/temporal

OriginalL'auteur wobblycogs | 2011-03-14