2009-08-17 9 views
3

Je suis nouveau sur Hibernate et je travaille avec une base de données Oracle 10g. Nous avons des colonnes dans nos tables qui sont de type TIMESTAMP WITH TIMEZONE. Hibernate ne semble pas supporter ce mapping directement. Existe-t-il un moyen standard de s'y prendre?Horodatage Hibernate avec Timezone

Répondre

1

TIMESTAMP WITH TIMEZONE est l'extension Oracle et n'est donc pas prise en charge par Hibernate dès sa sortie de l'emballage. Vous avez deux options:

1) Modifiez la structure de votre table pour stocker le fuseau horaire dans une colonne séparée (comme VARCHAR2). Hibernate est capable de map java.util.TimeZone comme type timezone en utilisant son identifiant.

2) écrire une classe personnalisée pour contenir à la fois l'horodatage et le fuseau horaire et un UserType personnalisé qui le persisterait. Il devra être un CompositeUserType si vous avez besoin de la possibilité d'utiliser ses propriétés individuelles (par exemple fuseau horaire ou timestamp) dans les requêtes. Regardez this example pour vous aider à démarrer; vous devrez le modifier pour stocker le fuseau horaire.

+3

Selon SQL dans un Nutshell par Kline et al, timestamp AVEC TIMEZONE est un type défini par SQL 2003. Ainsi, ce n'est pas une extension Oracle. –

+1

Appelez-le "extension SQL 2003 implémentée par Oracle" puis. Il n'est toujours pas pris en charge par Hibernate – ChssPly76

+0

java.util.Calendar contient à la fois des informations d'horodatage et de fuseau horaire. Par conséquent, la solution de joobik me semble meilleure. – sax

3

Un exemple d'un stockage UserType java.util.Calendar avec des informations de fuseau horaire est donnée dans ce billet de blog: http://www.joobik.com/2010/12/mapping-dates-and-time-zones-with.html

+6

ne pas poster juste un lien sinon votre réponse est sans valeur si le lien se brise – sra

+0

Lien mis à jour: http://www.joobik.com/2010/12/mapping-dates-and-time-zones-with.html –