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):
Comment puis-je assembler les deux, ou quelle est la "traduction" de la seconde en utilisant des criteria ... J'ai essayé ceci
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 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));
Mais cela plante car ma classe n'a pas la propriété : perimeterPortfolioElt.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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));
Merci pour votre aide.
Partager