Bonjour,

Je travaille sous Oracle. J'utilise Eclipse et Hibernate pour le code Java.

Mon but est d'effectuer une projection, avec notamment comme critère une date.
On récupère la date saisie par l'utilisateur, et on vient ensuite requêter la base sur NOTAMMENT le mois dans lequel la date est comprise.
Ex : saisie du 20/03/2010 => date début = 01/03/2010 inclue, date fin = 01/04/2010 exclue.
Jusque là rien de compliqué.
Sauf que....en fait Hibernate façonne un criteria sur un objet de type Date et non de type TimeStamp (a priori, j'attends un timestamp au format 2009-10-01 00:00:00.0). Mes attributs sont déclarés comme étant des Timestamp(6) dans Oracle 10g.

Voici mon code :



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
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
    public List<058Projection> findListe058Projection(String pCrit1, String pCrit2, Date pDateTraitement)
    {
        // Création d'un requête détachée
        DetachedCriteria criteria = DetachedCriteria.forClass(Psar.class);
 
        // Création de la projection
        ProjectionList uneProjection = Projections.projectionList();
 
        /**
         * LES GROUP BY
         */
        uneProjection.add(Projections.groupProperty("codiqueBase"), "codique");
        uneProjection.add(Projections.groupProperty("codeAnnexeBase"), "codeAnnexe");
        uneProjection.add(Projections.groupProperty("appli.codeAppli"), "application");
        uneProjection.add(Projections.sum("montant"), "cumulMontants");
 
        // Affectation de la projection à la requête
        criteria.setProjection(uneProjection);
 
        // test si on a une structure supérieure ( = "xxx000"), on prend tous les codiques qui commencent pas "xxx"
        if (pCrit1.substring(3, 6).compareTo("000") == 0)
        {
            criteria.add(Restrictions.ilike("codiqueBase", pCrit1.substring(0, 3), MatchMode.START));
        }
 
        else
        {
            criteria.add(Restrictions.eq("codiqueBase", pCrit1));
            criteria.add(Restrictions.eq("codeAnnexeBase", pCrit2));
        }
 
        Calendar dateTraitement = Calendar.getInstance();
        dateTraitement.setTime(pDateTraitement);
 
        int anneeTraitement = dateTraitement.get(Calendar.YEAR);
        int moisTraitement = dateTraitement.get(Calendar.MONTH);
 
        Calendar dateDebut = Calendar.getInstance();
        dateDebut.set(anneeTraitement, moisTraitement, 1, 0, 0, 0);
 
 
        Calendar dateFin = Calendar.getInstance();
        dateFin.set(anneeTraitement, moisTraitement + 1, 1, 0, 0, 0);
 
        criteria.add(Restrictions.ge("dateTraitementBase",dateDebut.getTime()));
        criteria.add(Restrictions.lt("dateTraitementBase", dateFin.getTime()));
 
 
        // tri OBLIGATOIRE avec ORACLE 10g
        criteria.addOrder(Order.asc("codiqueNominoe")).addOrder(Order.asc("codeAnnexeNominoe")).addOrder(
            Order.asc("appli.codeAppli"));
 
        // Transformation du résultat
        criteria.setResultTransformer(new AliasToBeanResultTransformer(058Projection.class));
 
        List<058Projection> liste058Projection = getHibernateTemplate().findByCriteria(criteria);
 
        return liste058Projection;
    }
Auriez-vous une solution à me proposer? A chaque fois que j'essaie, je tombe sur des méthodes dépréciées, donc pas recommandées....

Mille mercis.
Thomas