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

NHibernate Discussion :

[NHibernate] recherche via Icriteria sur objets complexes


Sujet :

NHibernate

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 10
    Points : 0
    Points
    0
    Par défaut [NHibernate] recherche via Icriteria sur objets complexes
    Bonjour,

    Je plante le décor

    Pour présenter mes données, J'ai des dossiers qui concernent soit des personnes physiques soit des personnes morales; il peut y avoir les deux.

    Dans le mapping hbm de mon dossier, j'ai : (ça marche)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <bag name="ProprietairesPhysiques" table="PERSON_JURIDICAL_FILE" lazy="false">
    	<key column="ID_JURIDICAL_FILE" />
    	<many-to-many column="ID_PERSON" class="XXX.Personne, XXX" />
    </bag>
     
    <bag name="ProprietairesMoraux" table="COMPANIE_JURIDICAL_FILE" lazy="false">
    	<key column="ID_JURIDICAL_FILE" />
    	<many-to-many column="ID_COMPANIE"  class="XXX.Companie, XXX"/>
    </bag>
    Ensuite, j'ai une interface de recherche dans laquelle on peut saisir un libellé de propriétaire, tout à fait classique.

    Je souhaite donc remonter tous les dossiers dont au moins un des noms des propriétaires physiques contient la chaine de recherche ou au moins un des noms des propriétaires moraux contient la chaine de recherche. toujours tout à fait classique.

    Et impossible car pour qu'un dossier soit remonté il faut que ma chaine soit contenue dans un des noms de propriétaires physiques ET que mes propriétaires moraux soit non vide ou vice-versa. Des pistes ?

    Michel.

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 273
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 273
    Points : 2 202
    Points
    2 202
    Par défaut
    Oui tu aurais du utiliser une stratégie d'héritage.

    C'est à dire faire un mapping de type :

    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
    
    <class name="Proprietaire" abstract="true"  table="Proprietaires">
    	<id name="Id">
    		<generator class="identity"/>
    	</id>
                 <property name="Nom"/>
                (Props communes à un propriétaire physique)
    
    	<discriminator column="Nature"
    			not-null="true"
    			type="System.String"/>
    	<subclass
    		name="ProprietairePhysique"
    		discriminator-value="PHYSIQUE">
    		(Props propres à un propriétaire physique)
    
    	</subclass>
    
    	<subclass
    		name="ProprietaireMoral"
    		discriminator-value="Company">
    		 (Props propres à un propriétaire Moral)
    
    	</subclass>
    </class>
    Ce qui fera que ton bag sera mappé à une collection de Proprietaire, donc récuperera invariablement ceux physiques ou moral dont le nom match ta recherche.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <bag name="Proprietaires" table="Proprietaire" lazy="false">
    	<key column="Id" />
    	<many-to-many column="ID_PROPRIETAIRE"  class="XXX.Proprietaire, XXX"/>
    </bag>
    Ce qui en HQL donnera :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    FROM Dossier as a
        WHERE a.Proprietaires.Name like :searchedprop
    Cela te demandera de changer ton modéle de données, mais fonctionnera

    L'exemple que je te donne ne créée qu'une seule table, mais c'est possible de faire plusieurs tables,etc,etc.

    Il ne te restera au final qu'à traiter le résultat du bag pour statuer le dossier en fonction de la propriété discriminante et éventuellement de caster sur l'implémentation.

Discussions similaires

  1. Double binding sur objet complex
    Par babass77 dans le forum Flex
    Réponses: 5
    Dernier message: 29/04/2011, 11h08
  2. Drag and Drop sur objet métier complexe
    Par jojodu31 dans le forum SWT/JFace
    Réponses: 0
    Dernier message: 06/05/2010, 15h33
  3. Envoie d'objet complexe via HTTPService
    Par rades2006 dans le forum Flex
    Réponses: 9
    Dernier message: 07/10/2009, 14h48
  4. Réponses: 3
    Dernier message: 16/11/2006, 12h54
  5. Requêtes : recherche de maxi sur plusieur Objet
    Par pertuis dans le forum Langage SQL
    Réponses: 6
    Dernier message: 08/03/2004, 16h28

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