Hibernate version: 3.00
Mapping documents: 3.00
Name and version of the database you are using: Oracle 9g
Bonjour à tous.
Je suis depuis peu sur un projet qui mélange Hibernate et Criteria.
Après m'être documenté sur ce dernier que je rencontre pour la première fois, je me suis penché sur un bug que je ne sais pas résoudre tant il est surprenant.
En simplifiant :
j'ai une table TRUC avec 3 champs
ID (string)
NOM (string)
BOOL (boolean)
et l'équivalent en objet java via le mapping hibernate
objet TRUC avec 3 paramètres : [...] + getter/setter [...]
Le but du programme est de permettre une recherche multicritère, d'ou la nécessite de prendre Criteria.
Je précise que "apparement" le mapping hibernate fonctionne bien
pour utiliser Criteria j'ai donc testé la chose suivante
Code:
TRUC truc = new TRUC(); //initialise en même temps les 3 propriété de l'objet à null
truc.nom = "azerty";
[...]
et un peu plus loin
Code:
[...]
Example example = Example.create(instance classe TRUC);
Criteria criteres = HibernateUtil.currentSession().createCriteria(modeleClassTRUC);
criteres.add(example);
return criteres.list();
Retournons maintenant côté bdd. voici ce que je peux avoir
Code:
ID..........NOM.............BOOL
11/11.......titi................true
11/12.......tata..............true
11/13.......toto..............true
12/11.......azerty...........true
12/12.......azerty...........false
12/13.......fifi................false
13/11.......riri................false
13/12.......loulou...........false
13/13.......maria...........false
Mon code devrait en théorie me retourner 2 elements :
12/11.......azerty...........true
12/12.......azerty...........false
ce qu'il fait avec succès.
Si je code :
TRUC truc = new TRUC();
truc.nom = "azerty";
truc.bool = true;
il me retourne bien uniquement
12/11.......azerty...........true
Si je code
TRUC truc = new TRUC();
truc.nom = "azerty";
truc.bool = true;
truc.id = "12/11";
il me retourne toujours bien uniquement
12/11.......azerty...........true
mais à ce moment les choses se gatent .
Si je code
TRUC truc = new TRUC();
truc.nom = "azerty";
truc.bool = true;
truc.id = "XXXXXXXXXX";
il me retourne toujours
12/11.......azerty...........true
Si je code
TRUC truc = new TRUC();
truc.id = "XXXXXXXXXX";
il me retourne tous les enregistrements !!
bref la propriété id n'est absolument pas prise en compte -_-'
Avez vous déjà eu/vu un tel phénomène ? sans pour autant donner la solution ultime, savez vous ou dans le code je peux chercher une raison de cette réaction ?
merci d'avance de votre aide.
Cordialement, Bess