Je rencontre le comportement très ennuyeux suivant lors de l'utilisation d'entités JPA en conjonction avec Oracle 10g.Y a-t-il un problème avec les entités JPA, Oracle 10g et les propriétés Type de calendrier?
Supposons que vous ayez l'entité suivante.
@Entity
@Table(name = "T_Order")
public class TOrder implements Serializable {
private static final long serialVersionUID = 2235742302377173533L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@Column(name = "activationDate")
private Calendar activationDate;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Calendar getActivationDate() {
return activationDate;
}
public void setActivationDate(Calendar activationDate) {
this.activationDate = activationDate;
}
}
Cette entité est associée à Oracle 10g, donc dans le DB, il y aura une table T_ORDER avec une colonne de clé primaire NOMBRE « ID » et une colonne TIMESTAMP « activationDate ».
Supposons que je crée une instance de cette classe avec la date d'activation "15. Sep 2008 00:00 AM". Mon fuseau horaire local est CEST, soit GMT + 02: 00. Quand je persiste cet objet et sélectionne les données de la table T_ORDER en utilisant sqlplus, je découvre que dans la table en fait "14. Sep 2008 22:00" est stocké, ce qui est ok jusqu'ici, car le fuseau horaire d'oracle db est GMT.
Mais maintenant, la partie ennuyante. Quand je lis cette entité dans mon programme JAVA, je découvre que le fuseau horaire de l'oracle est ignoré et je reçois "14. Sep 2008 22:00 CEST", ce qui est définitivement faux. Donc, fondamentalement, lors de l'écriture dans le DB, les informations de la fuseau horaire seront utilisées, lorsque la lecture sera ignorée.
Existe-t-il une solution pour cela? La solution la plus simple serait de définir le fuseau horaire oracle dbs sur GMT + 02, mais malheureusement je ne peux pas le faire car il y a d'autres applications utilisant le même serveur.
Nous utilisons la technologie suivante
MyEclipse 6.5 JPA avec Hibernate 3.2 Oracle 10g mince pilote JDBC
Merci d'avoir répondu. Je suis tombé par hasard sur le même fil de forum oracle que vous mentionnez ci-dessus. Malheureusement toutes les solutions données sont liées à quelque chose appelé EclipseLink et je ne veux vraiment pas passer à une nouvelle implémentation de l'API de persistance. – huo73
Les annotations sont des annotations JPA non spécifiques à eclipselink. Je l'ai utilisé avec Hibernate et ils fonctionnent bien. – JeroenWyseur