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 :

tri de liste


Sujet :

JPA Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 10
    Par défaut tri de liste
    Bonjour à tous,

    je débute avec ejb3, je suis confronté à implémenter le tri d'une liste d'objets entity récupéré par un ejb stateless. ce tri est effectué selon un des champs des objets entity.

    Pouvez vous m'informer sur la meilleur façon d'implémenter cette fonctionnalité. est ce dans la couche présentation en récupérant la liste et la trier selon le besoin.ou bien dans la couche métier/ejb?

    aussi il y la pagination des résultats, quelle est le meilleur moyen d'implémenter la pagination des résultats en ejb?

    merci beaucoup.

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 156
    Par défaut
    Je suppose que tu recupéres tes entités en effectuant une requete JPAQL.
    Il existe une clause order comme en SQL permettant de specifier l'attribut selon lequel on souhaite faire le tri.

  3. #3
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 10
    Par défaut
    mais le problème est qu'il y a plusieurs champ selon lesquelles on trient la liste. je ne pense pas qu'il est optimal d'écrire une requête JPAQL pour chaque chaque champ de tri. qu'est ce que vous en dites?

  4. #4
    Membre chevronné Avatar de bassim
    Homme Profil pro
    Ingénieur Réseaux
    Inscrit en
    Février 2005
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 666
    Par défaut
    Pourquoi ne pas utiliser alors l'interface Comparable, en implémentant la méthode CompareTo(Object o)

    Tu récupères ta liste d'objets et après tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Collections.sort(taListe);
    tu peux même choisir d'autres comparateurs, en utilisant un Comparator

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Collections.sort(taListe, new TonComparator())

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 156
    Par défaut
    Citation Envoyé par issamki Voir le message
    mais le problème est qu'il y a plusieurs champ selon lesquelles on trient la liste. je ne pense pas qu'il est optimal d'écrire une requête JPAQL pour chaque chaque champ de tri. qu'est ce que vous en dites?
    Je connais pas le détail de ton besoin et de ton appli, mais il faut favoriser le plus possible le tri via la requete.
    Car c'est beaucoup plus rapide que faire un tri coté java et en plus si tu ne ramènes pas tout les résultats possible (utilisation de setMaxResult), ton tri coté Java sera en partie faux.

    Ce n'est pas très compliqué à écrire pour une requete simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    String orderAttribut = " obj.champ1";
    if(condition1)
      orderAttribut = " obj.champ2";
    else if(condition2)
      orderAttribut = " obj.champ3";  
    else if(condition3)
      orderAttribut = " obj.champ4";    
     
    String strQuery = "select obj from MaClasse obj order by " + orderAttibut;

  6. #6
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par issamki Voir le message
    ... je ne pense pas qu'il est optimal d'écrire une requête JPAQL pour chaque chaque champ de tri. qu'est ce que vous en dites?
    Ça c'est certain, mais tu peux créer tes requêtes à la volée (comme on peut le faire avec JDBC)
    Tu peux faire ceci (complément à phantomass):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    StringBuilder sb = new StringBuilder(80);
    sb.append("select model from MaClasseEntity model");
     
    switch (order)
    {
       case 1 : sb.append(" order by model.col1, model.col2"); break;
       case 2 : sb.append(" order by model.col3"); break;
    }
     
    return entityManager.createQuery(sb.toString()).getResultList();
    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 10
    Par défaut
    oui, j'ai pas détaillé le problème que j'ai.en effet j'ai une page qui liste un ensemble de liens récupérés de la base de données,chaque entête présente un champ de l'objet entity, cette entête est à son tour un lien que si l'on clique dessus la liste est trié selon cette entête.
    certes ,les solutions que vous m'avez proposé peuvent marcher, mais pour faire la requête depuis la base de données chaque fois que l'on change de champ me parait non optimale.
    maintenant que je vous ai détaillé le problème. qu'est ce que vous en dites à nouveau.
    vraiment merci pour vos réponses.

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 156
    Par défaut
    Citation Envoyé par issamki Voir le message
    certes ,les solutions que vous m'avez proposé peuvent marcher, mais pour faire la requête depuis la base de données chaque fois que l'on change de champ me parait non optimale.
    Pourtant c'est ce qu'il faut à priori faire

    -Dans une application client lourd comme swing tu peux trier à foison tes objets depuis le client (dans un JTTable par exemple).
    - En html il y a des librairies javascript / DHTML qui permettent de faire du tri coté client sans invoquer le serveur.
    Maintenant si ton architecture est du type jsp et JPA et que ton tri doit être fait coté serveur, il vaut mieux requêter ta base de données.
    Car de toute façon tu ne vas pas stocker coté serveur en mémoire (dans la session par exemple) la liste des résultats du client car tu chargeras rapidement ta mémoire si t'as beaucoup de client.
    Un cache coté JPA peut énormément améliorer tes performances.

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

Discussions similaires

  1. Requête, tri sur liste de choix
    Par seb.kepka dans le forum Access
    Réponses: 1
    Dernier message: 15/05/2006, 14h47
  2. Algo de tri par liste chainée
    Par Treuze dans le forum C
    Réponses: 3
    Dernier message: 30/12/2005, 14h05
  3. quel est le meilleur algo de tri de liste ?
    Par sony351 dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 24/07/2005, 02h00
  4. [langage] tri avancé, liste de listes
    Par schnecke dans le forum Langage
    Réponses: 6
    Dernier message: 29/03/2004, 14h00
  5. tri de liste chainée
    Par RezzA dans le forum C
    Réponses: 7
    Dernier message: 26/01/2003, 20h25

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