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 :

Criteria Double et Like


Sujet :

JPA Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 109
    Par défaut Criteria Double et Like
    Bonjour (ou re)

    Je n'arrive pas à faire fonctionner mon criteria avec les type double et les like, je plante tout le temps. Voici ma méthode :

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    public List<Book> getBooksByMultiCriteria(String title, String editor, String isbn13, Double price) {
    
    		CriteriaBuilder cb = em.getCriteriaBuilder();
    		CriteriaQuery<Book> query = cb.createQuery(Book.class);
    
    		Root<Book> select = query.from(Book.class);
    
    		if (title != null && !title.isEmpty()) {
    			query.where(cb.equal(select.<String> get("title"),
    					cb.parameter(String.class, "titleSearched")));
    		}
    		if (editor != null && !editor.isEmpty()) {
    			query.where(cb.equal(select.<String> get("editor"),
    					cb.parameter(String.class, "editorSearched")));
    		}
    		if (isbn13 != null && !isbn13.isEmpty()) {
    			query.where(cb.like(select.<String> get("isbn13"), // PLANTE
    					cb.parameter(String.class, "isbn13Searched")));
    		}
    		if (price != null && price != 0.0) {
    			query.where(cb.equal(select.<Double> get("price"), // PLANTE
    					cb.parameter(Double.class, "priceSearched")));
    		}
    
    		TypedQuery<Book> typedQuery = em.createQuery(query);
    
    		if (title != null && !title.isEmpty()) {
    			typedQuery.setParameter("titleSearched", title);
    		}
    		if (editor != null && !editor.isEmpty()) {
    			typedQuery.setParameter("editorSearched", editor);
    		}
    		if (isbn13 != null && !isbn13.isEmpty()) {
    			typedQuery.setParameter("isbn13Searched", "*" + isbn13 + "*");
    		}
    		if (price != null && price != 0.00) {
    			typedQuery.setParameter("priceSearched", price);
    		}
    
    		List<Book> BooksCriter = typedQuery.getResultList();
    
    		return BooksCriter;
    J'ai appris à faire comme ça en cours pour criteria mais quand je regarde sur le net je ne vois pas beaucoup de personne utilisant cette manière. Est-ce parce que nous n'utilisons pas la même version ou suis-je en retard sur les façon de faire ?

    Merci

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    968
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 968
    Par défaut
    "// PLANTE" = Mon PC marche plus HELP

    Blague à part, que se passe-t-il? Vous obtenez une exception, la requête ne retourne rien alors qu'elle le devrait?

  3. #3
    Membre chevronné

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 200
    Par défaut
    suis-je en retard sur les façon de faire ?
    . Au contraire, le critéria a été ajouté à JPA depuis version 2.0 et continue d'être amélioré. C'est juste que beaucoup préfère le SQL et ces dérivés JPQL, HQL, etc
    Ingénieur Recherche et Développement en informatique à Sopra

    Page perso developpez : http://armel-ndjobo.developpez.com/
    Suivez moi sur twitter : ndjobo

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 109
    Par défaut
    Effectivement j'aurais du mettre les log.

    Pour le Like le bug survient sur cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	query.where(cb.like(select.<String> get("isbn13"),
    					cb.parameter(String.class, "isbn13Searched")));
    avec ce message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    javax.servlet.ServletException: javax.ejb.EJBException: java.lang.IllegalArgumentException: Unable to resolve attribute [isbn13] against path
    	javax.faces.webapp.FacesServlet.service(FacesServlet.java:606)
    	org.jboss.weld.servlet.ConversationPropagationFilter.doFilter(ConversationPropagationFilter.java:62)
    Pour le Double le bug survient sur cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    query.where(cb.equal(select.<Double> get("price"),
    					cb.parameter(Double.class, "priceSearched")));
    avec ce message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    javax.servlet.ServletException: javax.ejb.EJBException: java.lang.IllegalArgumentException: Unable to resolve attribute [price] against path
    	javax.faces.webapp.FacesServlet.service(FacesServlet.java:606)
    	org.jboss.weld.servlet.ConversationPropagationFilter.doFilter(ConversationPropagationFilter.java:62)
    En gros c'est le même message d'erreur pour 2 choses différentes.

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    968
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 968
    Par défaut
    A priori, JPA ne retrouve pas les attributs price et isbn13 de Book. Pouvez vous nous donner le code de Book et de la table correspondante?

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 109
    Par défaut
    Merci BugFactory, mon erreur a était de prendre mes noms de colonnes à la place de mes noms de variables... erreur de jeunesse dirons nous .

    Par contre mon Like ne fonctionne pas car je ne retourne aucun enregistrement. J'ai même tenté de mettre de faire une recherche sur %001% au cas où ce serait les % qui manquent mais non je n'ai aucun résultat. Y a t'il possibilité sous éclipse de voir en mode débug les requêtes ?

    Pour mon Double, ça fonctionne à condition que je mette un point et pas une virgule. Si je mets une virgule ma méthode du bouton "recherche" ne se lance même plus. Y a t'il un moyen d'obliger l'utilisateur à mettre un point ou alors de convertir les points en virgule ? Je suis en train de chercher sur le net et je trouve des solutions pour des String mais pas pour des double.

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

Discussions similaires

  1. [Criteria] Double relation @ManytoMany pas récupéré avec criteria
    Par amaury972 dans le forum Hibernate
    Réponses: 0
    Dernier message: 27/09/2011, 10h08
  2. api Criteria Jointure avec Double restriction
    Par lunatix dans le forum Hibernate
    Réponses: 4
    Dernier message: 21/04/2011, 17h20
  3. Criteria et like
    Par *alexandre* dans le forum Hibernate
    Réponses: 1
    Dernier message: 16/09/2008, 09h41
  4. Réponses: 3
    Dernier message: 12/06/2002, 21h15
  5. Créer un interpréteur de langage inspiré du Basic
    Par Picasso dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 11/05/2002, 17h10

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