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 :

Mapping : pourquoi List bugge et pas Set ?


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 65
    Par défaut Mapping : pourquoi List bugge et pas Set ?
    Bonjour
    J'utilise hibernate depuis peu et suis confronté à cette montagne de connaissances à ingurgiter pour savoir s'en servir
    Je vous soumet mon problème :

    Deux classes, deux tables : A et B
    A peut avoir plusieur B, B ne fait référence qu'à un seul A. Classique.
    Je bosse sous mySql.

    Voici mes déclarations de classes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    class A {
      int id;
      List<B> listB = new List<B>(10);
    ...
    }
     
    class B {
      ind id;
      A monAparent;
      ...
    }
    Au niveau du mapping :
    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
     
    <class name="A" table="A">
    	<id name="id" ...
    	</id>
    	<list name="listB" inverse="true" cascade = "all">
    		<key column="id_A"/>
    		<list-index column="name"/>
    		<one-to-many class="B"/>
    	</list>
    </class>
     
    <class name="B" table="B">
    	<id name="id" ...
    	</id>
    	<many-to-one	name="monAparent"
    			class="A"
    			column="id_A"
    			not-null="true" />
    </class>
    Au niveau de l'enregistrement des données JAVA=>Base de données, aucun soucis.
    Mais après une requête "from A as a order by a.id asc", Hibernate me trouve tous mes A, mais me trouve plus de B qu'il n'y en a vraiment.
    Par exemple, après récupération, dans premierA.listB, j'aurai :
    - null
    - null
    - 1enregistrementDeB
    - 1autreEnregistrementDeB

    ?!

    J'ai ensuite essayé de remplacer "List" par "Set" aussi bien dans ma classe que dans mon mapping, et ça marche correctement. Mais pourquoi ?!
    Et au passage, quelles sont les différences fondamentales entre List et Set ?

    Merci d'avance, et bonne année

  2. #2
    Membre expérimenté Avatar de mOuLi
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2008
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2008
    Messages : 170
    Par défaut
    List = liste avec gestion des éléments par indice (l'indice est symbolisé par <list-index .../> dans ton mapping).
    Set = ensemble d'objets en excluant les doublons (la détection des doublons se fait à partir de la méthode equals).

    Donc l'intérêt des listes est la prise en charge de l'ordre des éléments par Hibernate. Mais si par exemple, dans ta table fille les indices ont pour valeur 2 et 3 tu obtiendras une liste de taille 4 dans laquelle les éléments d'indice 0 et 1 sont nuls.

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 65
    Par défaut
    Humm... je ne suis pas sur d'avoir bien saisi.

    Cela veut il dire qu'avec un tel mapping :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <list name="listB" inverse="true" cascade = "all">
    	<key column="id_A"/>
    	<list-index column="id"/>
    	<one-to-many class="B"/>
    </list>
    ... je serai obligé de taper dans ma liste avec l'id de chaque élément B ?
    A.listB.get(id_1er_enfant_B)
    A.listB.get(id_2eme_enfant_B)
    ...
    Mais quel est l'intérêt ?

  4. #4
    Membre expérimenté Avatar de mOuLi
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2008
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2008
    Messages : 170
    Par défaut
    Avant tout, je te conseille de regarder la doc de référence au sujet des collections indexées.

    Même si je n'ai pas été très limpide, tu as bien compris le mécanisme
    Avec ton exemple de code, je suis d'accord que ça n'a aucun intérêt et il vaut mieux utiliser un Set voire un "Bag" (équivalent du Set sauf qu'il accepte les doublons).

  5. #5
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 65
    Par défaut
    Ok merci pour ces infos. Ca me rassure =)
    A bientôt pour de nouvelles aventures !

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

Discussions similaires

  1. [C#] Pourquoi je ne peux pas remplir ma liste ?
    Par cosmos38240 dans le forum Services Web
    Réponses: 5
    Dernier message: 28/08/2006, 15h13
  2. Pourquoi ce code marche pas sous FF?
    Par Death83 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 09/09/2005, 10h04
  3. [W3C] Pourquoi ça ne marche pas sous IE
    Par polo-j dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 16/02/2005, 16h07
  4. Pourquoi je n'ai pas le droit à un bootsplash ?
    Par Michaël dans le forum Administration système
    Réponses: 4
    Dernier message: 30/08/2004, 14h02
  5. [C#] Pourquoi je ne peux pas sauvegarder le fichier Xml ?
    Par gregoun dans le forum Services Web
    Réponses: 5
    Dernier message: 05/05/2004, 10h00

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