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 :

Collections Set et Ajout d'élement


Sujet :

Hibernate Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 511
    Points : 514
    Points
    514
    Par défaut Collections Set et Ajout d'élement
    bonjour,

    J'ai un probléme de conception avec hibernate.

    J'ai un objet A qui contient un set d'objet b

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <set name="objet b" lazy="true" inverse="true" batch-size="5" cascade="all-delete-orphan" order-by="id desc">
            	<key column="objetb"/>
            	<one-to-many class="com.myObjetBClass"/>
            </set>
    Ce set contient beaucoup d'objet b (50 000). D'ailleurs je ne le charge entièrement que dans de trés rare cas.

    J'ai besoin de rajouter un element dans ce set, je fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    objetB.setObjetA(myObjetA);
    objetA.getSetOfObjetB().add(objetB);
    Et la c'est le drame je suis obligé de charger mes 50 000 objets B pour en rajouter un seul.

    1 ) Y a t-il un moyen d'ajouter sans charger tous les objets
    2 ) Est ce un probléme de conception, je ne devrais pas avoir de set pour une si grande quantité
    3) Hibernate n'est pas fait pour gérer des cas comme celui ci

    Merci

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 511
    Points : 514
    Points
    514
    Par défaut
    Il semble que passer de Set à bag arrange le probléme. En faites les bag n'ont pas besoin d'être charger quand on leur ajoute un élément.

    Ma question est y a t-il une différence de comportement entre set et bag. Notamment avec des inverse="true" ?

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

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2008
    Messages : 170
    Points : 257
    Points
    257
    Par défaut
    En utilisant un Set, la liste contenant tes objetsB ne contiendra pas de doublon (en se basant sur la méthode equals que tu as idéalement redéfini dans la classe myObjetBClass). Avec un Bag tu peux charger tous les éléments en vrac (en double, triple, etc.)

    Donc il est compréhensible qu'en cas d'insertion d'un fils dans ta liste (de type Set) Hibernate charge la liste complète pour tester si cet élément est déjà présent ou non (pour exécuter la méthode equals).

    Un contournement possible (pour utiliser un Set et ne pas avoir le chargement complet de la liste) serait de se servir du fait qu'Hibernate (lors du chargement de l'objet "objetA") va charger la liste de tous les identifiants (mappés avec <id ...>) des fils pour pouvoir les charger tardivement (par lazy-load). Donc si la condition d'égalité entre les fils se fait sur uniquement sur l'identifiant, Hibernate ne devrait pas (à vérifier quand même ) avoir besoin de charger plus d'infos qu'il n'en a déjà.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 511
    Points : 514
    Points
    514
    Par défaut
    Merci mOuLi, réponse trés clair.

    Merci

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

Discussions similaires

  1. Hibernate: many-to-many, collections SET vides
    Par tzikin dans le forum Hibernate
    Réponses: 1
    Dernier message: 20/02/2007, 12h24
  2. [Generics] ajouter un élement dans une liste typée
    Par anitshka dans le forum Collection et Stream
    Réponses: 14
    Dernier message: 06/02/2007, 11h04
  3. Réponses: 7
    Dernier message: 09/01/2007, 09h36
  4. Ajout d'élement brut ?
    Par Alexino2 dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 13/10/2006, 20h37
  5. ajouter un élement à une liste ?
    Par debutant-1 dans le forum C
    Réponses: 19
    Dernier message: 19/05/2006, 12h30

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