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

Hibernate Java Discussion :

Recherche des données dans une BD ou dans une List


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Avril 2010
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 342
    Par défaut Recherche des données dans une BD ou dans une List
    Bonsoir,

    1) Je voudrais savoir s'il est possible par exemple de rechercher un mot qui commence par exemple par BA ou qui contient BA ou qui fini par BA dans toute la table d'une BD. C'est-à-dire afficher tous les objets qui ont le mot BA (un critère qui devra s’appliquer sur tous les champs de la table au même moment). On suppose qu’on ne connait pas les champs de la table. On veut juste savoir si cette table contient une donnée qui commence par BA, ou qui contient BA ou qui fini par BA et afficher tous les enregistrements concernés

    2) Lorsque je sélectionne tous les enregistrements d’une table et que je les charge dans une List par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List listEtudient =em.createQuery("select x from Etudiant x").getResultList();
    Lors de la recherche, est-il conseillé ou est-il plus facile de faire la recherche directement sur la List ou il faut a tout prix le faire directement à partir de la table de la BD.

    Merci

  2. #2
    Membre éclairé Avatar de clubist
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2008
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2008
    Messages : 217
    Par défaut
    Bonjour,

    je suppose que ton ORM est hibernate ( car j'ai trouvé dans ton code em ce que me rappelle de entityManager et donc JPA).

    bon mes réponses pour :
    La première question:

    Normalement vous avez un classe entité qui s'appelle Etudiant possède des attributs mappés par hibernate, donc vous pouvez créer un Criteria (Requette par critère dans hibernate) et dans cette criteria vous ajoutez des restriction sur tous les attributs de la classe Etudiant et biensur une relation logique OR entre ces restrictions, bon c'est un exemple pour ton cas pour éclaircir les choses

    Pour ce code en dessous, j'ai supposé que vous avez une classe entité Etudiant avec 3 attributs(et donc 3 colonnes dans la base portants les mêmes noms): nom, prenom et specialite de type java.lang.String et biensur un identifiant qui n'est pas mentionné içi.

    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
     
    List etudiants = sess.createCriteria(Etudiant.class)
    .add( Restrictions.or(
     
    // "%" signifie n'importe quel caractère
    // Critère sur la colonne "nom" (commence par BA ou contient BA ou fini par BA)
    Restrictions.like( "nom","BA%" ),
    Restrictions.like( "nom","%BA%" ),
    Restrictions.like( "nom","%BA" ),
     
    // Critère sur la colonne "prenom" (commence par BA ou contient BA ou fini par BA)
    Restrictions.like( "prenom","BA%" ),
    Restrictions.like( "prenom","%BA%" ),
    Restrictions.like( "prenom","%BA" ),
     
    // Critère sur la colonne "specialite" (commence par BA ou contient BA ou fini par BA)
    Restrictions.like( "specialite","BA%" ),
    Restrictions.like( "specialite","%BA%" ),
    Restrictions.like( "specialite","%BA" ),
     
    ) )
    .list();

    La deuxième question:
    Je pense que c'est conseillé de récupérer un liste d'objets de la base déjà filtrée mieux que retourner toute la liste, car imagines que tu as 1000 enregistrement dans une table ça va être très énorme de retourner une telle liste et de faire des boucles dedans pour chercher un objet !!

    Bonne chance.

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2010
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 342
    Par défaut
    OK, merci beaucoup clubist
    J'utilise JPA (il est vrai que c'est avec EclipseLink, mais peu importe). Si j'utilise la méthode ci-dessous, il me faudra le faire pour toutes mes tables et c'est ce que je veux éviter.

    Je voudrait avoir un composant unique et portable, peu importe la table. De telle sorte que lorsque l'utilisateur est sur des données de n'importe qu'elle table, qu'il puisse effectuer une rechercher selon le mot clé entré (BA était simplement un exemple)

    L'utilisateur a une zone de texte appelé Recherche Général sur laquelle il peut saisir son mot clé et validé. Immédiatement le tableau n'affiche que les entités contenant ce mot clé dans n'importe quel champs.

    Merci

  4. #4
    Membre éclairé
    Homme Profil pro
    Analyste/développeur Java EE
    Inscrit en
    Janvier 2005
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste/développeur Java EE

    Informations forums :
    Inscription : Janvier 2005
    Messages : 376
    Par défaut
    Une petite remarque concernant le code ci-dessous :
    Citation Envoyé par clubist Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    List etudiants = sess.createCriteria(Etudiant.class)
    .add( Restrictions.or(
     
    // "%" signifie n'importe quel caractère
    // Critère sur la colonne "nom" (commence par BA ou contient BA ou fini par BA)
    Restrictions.like( "nom","BA%" ),
    Restrictions.like( "nom","%BA%" ),
    Restrictions.like( "nom","%BA" ),
    ) )
    .list();
    On peut écrire les 3 restrictions en une seule ligne, comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Restrictions.like( "nom","BA", MatchMode.ANYWHERE)
    Avec cette ligne, il va chercher "BA", "%BA", "BA%" ou encore "%BA%".

Discussions similaires

  1. Rechercher des données dans une autre feuille
    Par pedrito75 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 15/05/2011, 18h40
  2. Réponses: 2
    Dernier message: 25/05/2009, 09h38
  3. Insérer des données d'un tableau php dans une table mysql
    Par tom43 dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 02/08/2006, 09h38
  4. copie d'une table Y d'une base A vers une table X d'une base
    Par moneyboss dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 30/08/2005, 21h24
  5. Réponses: 3
    Dernier message: 13/12/2004, 13h54

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