Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 2 sur 2
  1. #1
    Invité régulier
    Inscrit en
    septembre 2009
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : septembre 2009
    Messages : 22
    Points : 6
    Points
    6

    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.

  2. #2
    Invité régulier
    Inscrit en
    septembre 2009
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : septembre 2009
    Messages : 22
    Points : 6
    Points
    6

    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));

+ Répondre à la discussion
Cette discussion est résolue.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •