Bonjour les gens,
bon ça fait 2 heures que je cherche et je n'arrive pas à trouver la solution donc je sollicite l'aide d'une bonne âme charitable.
J'ai 2 objets mappés :
Côté base de données, j'ai ma table représentant ObjetPapa remplie comme ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 public class ObjetPapa implements java.io.Serializable { ... private ObjetFils objetFils; ... } public class ObjetFils implements java.io.Serializable { ... private long id; private String param; ... }
Pré-requis :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 idObjetPapa idObjetFils 1 5 2 8 3 0 4 15 5 0 6 17 etc...
les enregistrement en base, qui viennent d'une autre application, auraient du être renseignées avec la valeur null dans idObjetFils si jamais ObjetPapa n'avait pas d'ObjetFils, mais ce n'est pas le cas. Au lieu de ça, ils sont enregistrés avec idObjetFils=0. C'est comme ça, c'est moche mais je ne peut rien y faire.
Donc mon soucis est le suivant :
Je veux faire une requête qui récupère
- tous les ObjetPapa qui ont un ObjetFils tel que param="toto"
ET- tous les ObjetPapa qui n'ont pas d'ObjetFils (idObjetFils=0)
j'arrive à faire les deux requêtes distinctes qui sont respectivement
et
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Criteria criteria = sessionFactory.getCurrentSession() .createCriteria(ObjetPapa.class); criteria.add(Restrictions.eq("objetFils.id", 0);
Cependant, je n'arrive pas à obtenir une unique requête qui me retourne tous les enregistrements à la fois.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Criteria criteria = sessionFactory.getCurrentSession() .createCriteria(ObjetPapa.class); Criteria criteriaFils = criteria.createCriteria("objetFils"); criteriaFils.add(Restrictions.eq("param","toto"));
Est-ce qu'il existe une façon de faire quelque chose comme :
Merci d'avance
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Criteria criteria = sessionFactory.getCurrentSession() .createCriteria(ObjetPapa.class); Criterion critZero = Restrictions.eq("objetFils.id", 0); Criteria criteriaFils = criteria.createCriteria("objetFils"); criteriaFils.add(Restrictions.eq("param","toto")); criteria.add(Restrictions.or(critZero,criteriaFils));
Partager