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 :

one-to-many et set vide


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3
    Par défaut one-to-many et set vide
    Bonjour, quelques sujets traitent de ce problème mais jamais avec la même raison.

    Je suis débutant en hibernate et je tente de mettre en place une relation simple bidirectionnel en one-to-many.

    J'ai donc une classe Status, et une classe StatusType
    Status pointe vers un Status type. Je voudrais également pouvoir obtenir facilement la liste des Status lié à un StatusType donné.

    J'ai mis ça en place avec les tests unitaire mais mon test retourne toujours 0 status lié.

    Pour le code

    Conf de Status
    <class name="ImplementStatus" table="implementStatus">
    <meta attribute="generated-class">com.cogis.esphynx.hibernate.model.base.ImplementStatus</meta>
    <id name="id" column="id" type="long">
    <generator class="increment"/>
    </id>
    <property name="label" type="string" not-null="true">
    <meta attribute="field-description">Implement status label</meta>
    <column name="label" length="255"/>
    </property>
    <many-to-one name="type" class="ImplementStatusType" column="type" not-null="false">
    <meta attribute="field-description">The type on which this status is linked</meta>
    </many-to-one>
    </class>
    Pour la conf StatusType
    <class name="ImplementStatusType" table="implementStatusType">
    <id name="id" column="id" type="long">
    <generator class="increment"/>
    </id>
    <property name="label" type="string" not-null="true">
    <meta attribute="field-description">Implement status type label</meta>
    <column name="label" length="255"/>
    </property>
    <set name="status" lazy="true" inverse="true" cascade="save-update">
    <key column="type"/>
    <one-to-many class="ImplementStatus"/>
    </set>
    <set name="to" table="ImplementStatusTypeWorkFlow" inverse="true" lazy="true">
    <key column="implementStatusType_from"/>
    <many-to-many column="implementStatusType_to" class="ImplementStatusType"/>
    </set>
    </class>
    Et mon test
    ist1 = new ImplementStatusType("Type");
    session.save(ist1);
    is1 = new ImplementStatus("Status1", ist1);
    session.save(is1);
    is1 = new ImplementStatus("Status2", ist1);
    session.save(is1);
    is1 = new ImplementStatus("Status3", ist1);
    session.save(is1);
    session.flush();
    System.out.println("Status liés ="+ist1.getStatus().size());
    Hé bien ça me sort 0 en résultat, au lieu du 3 attendu
    Pour moi la relation est simple:
    - si j'ajoute un status lié à un type, alors ce status est disponible dans getStatus
    - si j'ajoute un status dans la liste getStatus, alors dans l'objet status, je me retrouve mon type lié

    Est ce que c'est bien ça la logique ? ai-je oublié quelquechose ?
    Ha, et petit détail, mon set "to" du type marche quant à lui très bien...

    Merci d'avance

  2. #2
    Membre Expert
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Par défaut
    Recharge ist1.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3
    Par défaut
    Arf, en effet ça semble être ça. Déjà merci pour la réponse très rapide

    Si je fais
    session.refresh(ist1);
    ça corrige le problème.Déjà est ce la bonne méthode ? ^^

    Et alors par contre j'ai dû rater qqchose. Pour moi a partir du moment où un objet (ist1) est sauvegardé en base (session.save) alors il reste synchronisé et je peux le retrouver dans un état différent après. Ou c'es pas logique ? Parce qu'il m'avait semblé voir un mécanisme de détachement justement....

    ça veut dire que je serai obligé de faire un refresh sur mon objet avant chaque intérrogation sur celui ci ?

  4. #4
    Membre Expert
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Par défaut
    Quand tu restes dans ta session, si tu modifies en java ton objet, il sera modifié en base. Par contre, s'il est modifié en base, il ne sera pas rechargé en java (il faudrait scanner la base en continu à l'affut de modif, ou avoir des triggers sur tout).

    Mais par contre, quand tu crées un statut avec un type, rien ne t'empêche dans le constructeur d'aller rajouter le statut dans le set du type

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3
    Par défaut
    Bon hé bien je trouve ça bizarre car je pensais qu'avec Hibernate on pouvait se passer de ce genre de mécanisme. Mais je comprends bien le problème maintenant
    Merci de tes réponse et de la petite astuce ^^. Je vais en effet rajouter ça dans le constructeur

    Résolu

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

Discussions similaires

  1. one-to-many et set null.
    Par Spiff__ dans le forum Hibernate
    Réponses: 2
    Dernier message: 08/11/2010, 13h54
  2. one-to-many. remplir une set
    Par rimy2mi dans le forum Hibernate
    Réponses: 0
    Dernier message: 18/03/2009, 12h40
  3. [Hibernate] Join fetch et set (one-to-many)
    Par TiMiD dans le forum Hibernate
    Réponses: 2
    Dernier message: 26/10/2007, 02h48
  4. Hibernate: many-to-many, collections SET vides
    Par tzikin dans le forum Hibernate
    Réponses: 1
    Dernier message: 20/02/2007, 12h24
  5. [EJB2.1 Entity] [CMR] Relation One to Many
    Par hamed dans le forum Java EE
    Réponses: 2
    Dernier message: 31/12/2003, 14h26

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