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 :

[Criteria] Recherche multicritère via 'Example'.


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut [Criteria] Recherche multicritère via 'Example'.
    Bonjour à tous,

    Je cherche à réaliser uen requête de recherche qui peux porter sur un attribut 'A' ou 'B' ou encore 'A' et 'B'.
    Je m'explique :

    J'ai un objet 'House' qui est composé de 'Person' et 'Adresse'. Mon formulaire de recherche possède un champ "Name" qui correspond à 'House.Person.name' et un select "Adresse" qui correspond à 'House.Addresse'

    Je voudrais que ma recherche se comporte comme ceci :
    - On remplis juste le champ "Name" : ('Home.Person.name' est rempli) -> Je récupère tous les 'House' pour lequel la personne possède un nom semblable (via LIKE)
    - On sélectionne une adresse : ('Home.Adresse' est rempli) -> Je récupère toues les 'House' qui sont à la même adresse
    - On remplis le champ "Name" et on sélectionne une adresse -> Je récupère les 'House' qui ont un propriétaire dont le nom est smblable à name (via LIKE) et qui sont à l'adresse donnée.

    J'ai essayé plusieurs combinaisons mais rine ne semble fonctionner et, il faut bien l'avouer, je suis assez perdu dans les Criterions et autres Examples.


    Merci
    Dernière modification par Invité ; 08/08/2008 à 14h48.

  2. #2
    Membre éclairé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 298
    Par défaut
    Je ne sais pas ce que tu as testé, mais j'aurais tendance à faire une méthode findByExample dans ton HouseDao. Un truc du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        public List<House> findByExample(House h) {
    	Example exampleHouse = Example.create(h)
    					.ignoreCase()  // recherche insensible à la casse sur toutes les properties de type String
    					.enableLike(MatchMode.ANYWHERE); // Like sur toutes les properties de type String
     
            Criteria crit = getSession().createCriteria(House.class)
            				.add(exampleHouse);
            return crit.list();
       }
    Tu passe ton objet House à cette méthode en l'initialisant avec ta Person et ton Address

  3. #3
    Invité
    Invité(e)
    Par défaut
    Mon premier essai était aussi simple que l'exemple que tu me propose mais en regardant le SQL joué par hibernate, il m'a semblé que seul le premier niveau de l'Example était pris en compte.
    Je n'ai vu nulle part de select prenant en compte "Person.name" ou "Adresse"

  4. #4
    Invité
    Invité(e)
    Par défaut
    Je confirme, le fait de construire "simplement" l'Example comme tu le conseille ne fonctionne pas, la seule clause WHERE qui en résulte est la suivante :
    where
    (
    1=1
    )

    Ok, il suffisait de bine lire le doc au chapitre "15.6. Requêtes par l'exemple" :
    Vous pouvez utiliser les "exemples" pour des critères sur les objets associés.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    List results = session.createCriteria(Cat.class)
        .add( Example.create(cat) )
        .createCriteria("mate")
            .add( Example.create( cat.getMate() ) )
        .list();
    Dernière modification par Invité ; 19/08/2008 à 14h46.

  5. #5
    Membre confirmé Avatar de anas.eh
    Profil pro
    Inscrit en
    Février 2007
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Maroc

    Informations forums :
    Inscription : Février 2007
    Messages : 181
    Par défaut
    Bonjour,

    S'il vous plait pourriez vous m'expliquer un peu plus la requête "exemples" pour les critères sur les objets associés. Je n'ai pas compris comment ça peut se faire, par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class Ouvrage {
    public String titre;
    public Matiere matiere;
    }
     
    public class Matiere {
    public String nomMat;
    }
    Et en créant l'exemple avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Ouvrage ouvrEx = new Ouvrage();
    ouvrEx.setTitre("titre");
    Matiere mat = new Matiere();
    mat.setNomMat("nom");
    ouvrEx.setMatiere(mat);
    Voilà j'ai construit mon objet à deux niveaux, comment je vais faire pour utiliser l'exemple pour qu'il me ressort la recherche à deux niveaux,

    Merci,

  6. #6
    Membre confirmé Avatar de anas.eh
    Profil pro
    Inscrit en
    Février 2007
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Maroc

    Informations forums :
    Inscription : Février 2007
    Messages : 181
    Par défaut
    Bonjour,

    C'est bon, j'ai fait comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Ouvrage ouvrEx = new Ouvrage();
    ouvrEx.setTitre("titre");
    Matiere mat = new Matiere();
    mat.setNomMat("nom");
    ouvrEx.setMatiere(mat);
     
    Criteria crit = session.createCriteria(Ouvrage.class)
    .add(Example.create(ouvrEx));
     
    crit..createCriteria("matiere").add( Example.create( ouvrEx.getMatiere() ) )
     
    List results = crit.list();
    Merci,

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

Discussions similaires

  1. Recherche multicritères via plusieurs textbox
    Par qchamb dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 16/02/2015, 15h41
  2. Réponses: 1
    Dernier message: 27/12/2011, 15h44
  3. Criteria : Recherche multicritère
    Par KneXtasY dans le forum Hibernate
    Réponses: 2
    Dernier message: 06/07/2007, 16h24
  4. Réponses: 2
    Dernier message: 01/10/2005, 19h42
  5. recherche multicritères
    Par onlineduel dans le forum Débuter
    Réponses: 3
    Dernier message: 30/03/2004, 17h15

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