Précédent   Forum du club des développeurs et IT Pro > Java > Général Java > Persistance > JPA
JPA Forum d'entraide sur l'API de persistance JPA (Java Persistence API)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 23/11/2012, 18h02   #1
P'tite_Lily
Invité régulier
 
Inscription : septembre 2009
Messages : 22
Détails du profil
Informations forums :
Inscription : septembre 2009
Messages : 22
Points : 5
Points : 5
Par défaut Example et Jointure

Bonjour,

J'ai d'un coté développé une méthode utilisant "Example" (org.hibernate.criterion.Example) permettant de "filtrer" mes données de ma première table. J'ai donc un Criteria.

j'ai récupérer le code suivant permettant de faire plusieurs jointures (c'est cette double jointure que je dois appliquer à mon criteria):
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
           CriteriaBuilder qBuilder = em.getCriteriaBuilder();
            CriteriaQuery<T> qDef = qBuilder.createQuery(getObjectClass());
 
            Root<T> qRoot = qDef.from(getObjectClass());
            Join<T, Premises> joinPremises = qRoot.join("premises");
            Join<Premises, ConcretePerimeterPortfolioElement> joinPerimeterPortfolioElt = joinPremises
                    .join("perimeterPortfolioElt");
 
            List<Predicate> predicateList = new ArrayList<Predicate>();
            predicateList.add(qBuilder.equal(joinPerimeterPortfolioElt.get("id").<SphUser> get("user"), user));
 
             predicateList.add(qBuilder.equal(joinPerimeterPortfolioElt.<Boolean> get("inPortfolio"), inPortfolio));
 
            Predicate[] predicates = new Predicate[predicateList.size()];
            predicates = predicateList.toArray(predicates);
            qDef.where(qBuilder.and(predicates));
 
            if (null != orderBy) {
                qDef.orderBy(ascending ? qBuilder.asc(qRoot.get(orderBy)) : qBuilder.desc(qRoot.get(orderBy)));
            }
 
            TypedQuery<T> query = em.createQuery(qDef.select(qRoot));
Comment puis-je assembler les deux, ou quelle est la "traduction" de la seconde en utilisant des criteria ... J'ai essayé ceci
Code :
1
2
3
4
5
6
7
8
9
 
            Criteria criteria = session.createCriteria(getObjectClass());
            criteria.add(example);
 
            criteria.createCriteria("premises");
            criteria.createCriteria("perimeterPortfolioElt");
            criteria.add(Restrictions.eq("inPortfolio", inPortfolio));
            criteria.createCriteria("id");
            criteria.add(Restrictions.eq("user", user));
Mais cela plante car ma classe n'a pas la propriété : perimeterPortfolioElt.

Merci pour votre aide.
P'tite_Lily est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/11/2012, 12h05   #2
P'tite_Lily
Invité régulier
 
Inscription : septembre 2009
Messages : 22
Détails du profil
Informations forums :
Inscription : septembre 2009
Messages : 22
Points : 5
Points : 5
Par défaut Une solution

Bonjour,

J'ai trouvé une solution :
Code :
1
2
3
4
5
6
7
8
 
            Criteria criteria = session.createCriteria(getObjectClass());
            criteria.add(example);
 
            criteria.createAlias("premises", "prem");
            criteria.createAlias("prem.perimeterPortfolioElt", "PPElt");
            criteria.add(Restrictions.eq("PPElt.inPortfolio", inPortfolio));
            criteria.add(Restrictions.eq("PPElt.id.user", user));
P'tite_Lily est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 13h47.


 
 
 
 
Partenaires

Hébergement Web