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
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,
Il y a une jointure entre la table Report et Time sur les champs REP_DATE et TIME_ID.

Dans les fichiers mapping hibernate le champ date est mappé avec un type hibernate timestamp:
Report.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>
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
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>
Dans le dto Time le champ timId est de type java.util.Date

Le champ date récupéré via l'objet java Report dans l'application est parfois incorrecte :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
logger.debug(report.getTime().getTimId());
Exemples :
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
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.
Pour info voici les paramètres de la base de données
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"
Si vous avez des idées je suis preneur