Bonjour
Voila j'ai un problème de date sur une application web WAS7/Hibernate/Oracle 10g. L'application remonte parfois des enregistrements avec un champ de type de date incorrecte.
En base de données, j'ai 2 tables REPORT et TIME
Il y a une jointure entre la table Report et Time sur les champs REP_DATE et TIME_ID.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 REPORT : "REP_ID" NUMBER(6,0) NOT NULL ENABLE, "REP_DATE" DATE, TIME: "TIM_ID" DATE NOT NULL ENABLE, "TIM_MONTH" NUMBER(*,0) NOT NULL ENABLE, "TIM_YEAR" NUMBER(*,0) NOT NULL ENABLE,
Dans les fichiers mapping hibernate le champ date est mappé avec un type hibernate timestamp:
Report.hbm.xml
Time.hbm.xml
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 <hibernate-mapping> <class name="Report" table="REPORT"> <id name="repId" type="int"> <column name="REP_ID" precision="6" scale="0" /> <generator class="sequence"> <param name="sequence">S_REPORT</param> </generator> </id> <many-to-one name="time" class="Time" fetch="select"> <column name="REP_DATE" length="7" /> </many-to-one> ... </class> </hibernate-mapping>
Dans le dto Time le champ timId est de type java.util.Date
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 <hibernate-mapping> <class name="Time" table="TIME"> <id name="timId" type="timestamp"> <column name="TIM_ID" length="7" /> <generator class="assigned" /> </id> <property name="timMonth" type="big_decimal"> <column name="TIM_MONTH" precision="22" scale="0" /> </property> <property name="timYear" type="big_decimal"> <column name="TIM_YEAR" precision="22" scale="0" /> </property> <set name="reports" inverse="true" lazy="true" table="REPORT" fetch="select"> <key> <column name="REP_DATE" length="7" /> </key> <one-to-many class="Report" /> </set> ... </class> </hibernate-mapping>
Le champ date récupéré via l'objet java Report dans l'application est parfois incorrecte :
Exemples :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 logger.debug(report.getTime().getTimId());
C'est le fait que cela soit aléatoire qui me gène le plus. Et je ne sais si cela vient de Hibernate, du client jdbc (ojdbc14.jar) ou de la base de données.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Dans l'application En base (via un client du putty) 2011-01-31 15:00:00.0 2011-02-11 00:00:00 2010-12-31 15:00:00.0 2011-01-11 00:00:00 2010-11-30 15:00:00.0 2010-12-10 00:00:00 2010-10-31 16:00:00.0 2010-11-10 00:00:00
Pour info voici les paramètres de la base de données
Si vous avez des idées je suis preneur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 "PARAMETER" "VALUE" "NLS_LANGUAGE" "AMERICAN" "NLS_TERRITORY" "AMERICA" "NLS_CURRENCY" "$" "NLS_ISO_CURRENCY" "AMERICA" "NLS_NUMERIC_CHARACTERS" ".," "NLS_CHARACTERSET" "AL32UTF8" "NLS_CALENDAR" "GREGORIAN" "NLS_DATE_FORMAT" "DD-MON-RR" "NLS_DATE_LANGUAGE" "AMERICAN" "NLS_SORT" "BINARY" "NLS_TIME_FORMAT" "HH.MI.SSXFF AM" "NLS_TIMESTAMP_FORMAT" "DD-MON-RR HH.MI.SSXFF AM" "NLS_TIME_TZ_FORMAT" "HH.MI.SSXFF AM TZR" "NLS_TIMESTAMP_TZ_FORMAT" "DD-MON-RR HH.MI.SSXFF AM TZR" "NLS_DUAL_CURRENCY" "$" "NLS_COMP" "BINARY" "NLS_LENGTH_SEMANTICS" "BYTE" "NLS_NCHAR_CONV_EXCP" "FALSE" "NLS_NCHAR_CHARACTERSET" "AL16UTF16" "NLS_RDBMS_VERSION" "10.2.0.4.0"
Partager