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 :

Fonction SQL position dans JPA criteria


Sujet :

JPA Java

  1. #1
    Membre averti
    Avatar de stc074
    Homme Profil pro
    Codeur du dimanche
    Inscrit en
    Janvier 2009
    Messages
    1 015
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Lozère (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Codeur du dimanche

    Informations forums :
    Inscription : Janvier 2009
    Messages : 1 015
    Points : 407
    Points
    407
    Billets dans le blog
    1
    Par défaut Fonction SQL position dans JPA criteria
    Bonjour, j'ai cherché partout mais sans succès je cherche à transcrire cette requêtes SQL en jpa criteria :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DISTINCT c.id, c.category_name, position(? in c.category_name) AS pos FROM category c JOIN category_site cs ON c.id=cs.id_category JOIN site s ON cs.id_site=s.id WHERE s.submited=? AND c.category_name LIKE ? ORDER BY pos LIMIT ?
    c au niveau de position(? in c.category_name) que je ne trouve pas d'équivalent, ça devrait exister pourtant non ?
    Merci.

  2. #2
    Membre averti
    Avatar de stc074
    Homme Profil pro
    Codeur du dimanche
    Inscrit en
    Janvier 2009
    Messages
    1 015
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Lozère (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Codeur du dimanche

    Informations forums :
    Inscription : Janvier 2009
    Messages : 1 015
    Points : 407
    Points
    407
    Billets dans le blog
    1
    Par défaut
    bon finalement j'ai essayé quelque chose j'utilise locate :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
                CriteriaBuilder cb = em.getCriteriaBuilder();
                CriteriaQuery<MappedCategory> cq = cb.createQuery(MappedCategory.class);
                Root<MappedCategory> root = cq.from(MappedCategory.class);
                Join<MappedCategory, MappedSite> join = root.join(MappedCategory_.mappedSiteCollection);
                Predicate[] predicates = new Predicate[2];
                predicates[0] = cb.equal(join.get(MappedSite_.submited), true);
                predicates[1] = cb.like(root.get(MappedCategory_.categoryName), "%" + quer + "%");
                cq.where(predicates);
                Order order = cb.asc(cb.locate(cb.parameter(String.class, "pos"), root.get(MappedCategory_.categoryName)));
                cq.orderBy(order);
                cq.select(root);
                list = em.createQuery(cq).setParameter("pos", quer).setMaxResults(Data.NBMAXCATEGORYCOMPLETE).getResultList();
    et en mode verbeux j'ai ça en fin de requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORDER BY STRPOS(?, t1.category_name)
    ça devrait etre bon seulement ça me donne le même résultat que sans order, donc ça marche pas, d'un autre côté je vois pas ce qu'il y a à la place du ? dans order mais bon.
    Merci

  3. #3
    Membre averti
    Avatar de stc074
    Homme Profil pro
    Codeur du dimanche
    Inscrit en
    Janvier 2009
    Messages
    1 015
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Lozère (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Codeur du dimanche

    Informations forums :
    Inscription : Janvier 2009
    Messages : 1 015
    Points : 407
    Points
    407
    Billets dans le blog
    1
    Par défaut
    Bon en fait j'utilisais locate à l'envers en inversant les 2 paramètres ça fonctionne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                Order order = cb.asc(cb.locate(root.get(MappedCategory_.categoryName), cb.parameter(String.class, "pos")));

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 02/12/2016, 14h43
  2. Réponses: 0
    Dernier message: 08/11/2016, 15h01
  3. [MySQL] Utiliser la fonction sql EXECUTE dans script PHP
    Par boozook dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 07/12/2012, 22h43
  4. [Sql Server] Fonction de recherche dans une chaine
    Par pierre031183 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 06/01/2011, 16h16
  5. fonction équivalente à la fonction MOD (oracle) dans ms-sql
    Par rodrigue50 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 14/07/2005, 16h14

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