IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JPA Java Discussion :

API Criteria JPA2: requetage dynamique


Sujet :

JPA Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2008
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 139
    Par défaut API Criteria JPA2: requetage dynamique
    Bonjour,

    Depuis que l'API Criteria a été incluse dans JPA2, j'ai toujours voulu l'utiliser pour construire mes requêtes dynamiques au lieu de jouer avec une String représentant la requête JPQL.

    J'aimerais commencer par faire une requête toute simple.

    Voici le prototype de ma fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public List<User> findUser(String nom, String prenom, String login);
    Comme vous l'avez surement compris, j'essaie de faire une requete sur des utilisateurs en fonction de la présence ou nom de paramètres d'entrée.

    exemple: Si j'ai login.equals("") alors je fait une clause WHERE uniquement sur nom et prenom.

    Voici ce que j'ai essayé de faire pour le moment:
    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
    24
    25
    26
    27
    28
     
    public List<User> findUser(String nom, String prenom, String login) {
    		login = (login==null?"":login.trim());
    		nom = (nom==null?"":nom.trim());
    		prenom = (prenom==null?"":prenom.trim());
    		List<User> result = null;
    		CriteriaBuilder cb = em.getCriteriaBuilder();
    		CriteriaQuery<User> cquery = cb.createQuery(User.class);
    		Root<User> root = cquery.from(User.class);
    		cquery = cquery.select(root);
     
    		Predicate whereP;
                    //initialisation du where par un predicate toujours vrai afin de faire des AND dynamiquement à la suite
     
    		if(!login.isEmpty()) {
    		   //ajout d'une clause AND: cb.equal(root.get("nom"), nom))
                    }
    		if(!nom.isEmpty()) {
    		  //idem pour le nom
                    }
    		if(!prenom.isEmpty()) {
                      //idem pour le prenom
    		}
     
    		cquery.orderBy(cb.asc(root.get("nom")), cb.asc(root.get("prenom")));
    		result = em.createQuery(cquery).getResultList();
    		return result;
    	}
    J'imagine qu'il y a une astuce mais laquelle?

    Merci!

  2. #2
    Membre confirmé
    Inscrit en
    Septembre 2008
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 139
    Par défaut
    Voici le pendant jpql:

    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
     
    public List<User> findUser(String nom, String prenom, String login) {
    		login = (login==null?"":login.trim());
    		nom = (nom==null?"":nom.trim());
    		prenom = (prenom==null?"":prenom.trim());
    		String jpql = "select u from User u where 1=1 ";
    		if(login.isEmpty() && nom.isEmpty() && prenom.isEmpty())
    			return new ArrayList<>();
     
    		if(!login.isEmpty()) {
    			jpql += " and u.login = "+login;
    		}
    		if(!nom.isEmpty()) {
    			jpql += " and u.nom = "+nom;
    		}
    		if(!prenom.isEmpty()) {
    			jpql += " and u.prenom = "+prenom;
    		}
    		jpql += " order by u.nom, u.prenom";
    		return em.createQuery(jpql).getResultList();
     
    	}

Discussions similaires

  1. Requête dynamique avec l'api Criteria
    Par Keitaro44 dans le forum JPA
    Réponses: 0
    Dernier message: 04/03/2012, 22h26
  2. api Criteria Jointure avec Double restriction
    Par lunatix dans le forum Hibernate
    Réponses: 4
    Dernier message: 21/04/2011, 17h20
  3. Jointure avec API Criteria
    Par ginkas31 dans le forum Hibernate
    Réponses: 1
    Dernier message: 05/03/2008, 12h31
  4. API Criteria, charger une jointure, problème bizarre
    Par TiMiD dans le forum Hibernate
    Réponses: 2
    Dernier message: 17/10/2007, 17h06
  5. [Hibernate] Requete basé sur l'API Criteria
    Par K-Kaï dans le forum Hibernate
    Réponses: 16
    Dernier message: 16/06/2006, 16h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo