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 :

Relation Many-to-one: enlever de la relation non sauvé


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2010
    Messages : 5
    Par défaut Relation Many-to-one: enlever de la relation non sauvé
    Bonjour à tous,

    J'ai un petit problème (de configuration ?) sur Hibernate. Je m'explique:
    J'ai une table 'Operator' et une table 'OperatorGroup', un operator étant dans un ou aucun group et un group pouvant évidement contenir plusieurs operators.

    Voici la config hibernate:

    OperatorGroup:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <class name="OperatorGroup" table="OperatorGroup">
        ...
        <set name="operators" cascade="all" lazy="true" inverse="true">
            <key column="operatorGroupId"/>
            <one-to-many class="Operator"/>
        </set>
    </class>
    Operator:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <class name="Operator" table="Operator">
        <many-to-one name="operatorGroup" insert="true" update="true" not-null="false" class="eu.bluepimento.mcl.vom.model.OperatorGroup" lazy="proxy" cascade="none">
            <column name="operatorGroupId"/>
        </many-to-one>
    </class>
    Le problème c'est que si j'atoute un operator (existant) à la un group (existant aussi) en faisant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    monOperator.setOperatorGroup(monGroup);
    monGroup.getOperators().add(monOperator);
    getHibernateTemplate().merge(operatorGroup);
    //save operatorGroup
    Ca fonctionne parfaitement, l'operator se voit bien attribuer le groupId en DB.

    Par contre si je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    monOperator.setOperatorGroup(null);
    monGroup.getOperators().remove(monOperator);
    getHibernateTemplate().merge(operatorGroup);
    //save operatorGroup
    Ca ne fonctionne pas, mon operator garde toujours son lien vers le group !
    Si j'enlève l'inverse="true" dans OperatorGroup ça fonctionne, mais est-ce normal ?

    Je ne veux evidement pas m'amuser à sauver les operators en plus du group.

    Merci d'avance,

  2. #2
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Oui, c'est normal, tu lui dis de gérer la relation par l'objet Operator.
    Là, tu modifies le set de OperatorGroup alors qu'il faudrait supprimer la référence dans Operator
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2010
    Messages : 5
    Par défaut
    Ce n'est pas justement le but du cascade="all" ?
    J'ai lu sur plusieurs docs que le cascade="all" et le inverse="true" n'avaient aucun effet l'un sur l'autre.
    Et sinon, comment ça ce fait que ça marche pour un ajout dans la relation et pas pour la suppression, car je suis exactement la même logique ?

    Merci pour ta réponse en tout cas.

  4. #4
    Membre averti
    Inscrit en
    Octobre 2009
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 27
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <class name="OperatorGroup" table="OperatorGroup">
        ...
        <set name="operators" cascade="all" lazy="true" inverse="true">
            <key column="operatorGroupId"/>
            <one-to-many class="Operator"/>
        </set>
    </class>
    Operator:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <class name="Operator" table="Operator">
        <many-to-one name="operatorGroup" insert="true" update="true" not-null="false"class="eu.bluepimento.mcl.vom.model.OperatorGroup" lazy="proxy" cascade="none">
            <column name="operatorGroupId"/>
        </many-to-one>
    </class>

    tu indique que "operator group" ne peut pas etre null puis, dans ton code, tu veux insérer la valeur null.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2010
    Messages : 5
    Par défaut
    Bonjour Babilion,

    En fait je mets un not-null="false" pas "true". Je peux donc avoir null... ou alors je me fourvoie complètement
    J'ai de toute façon essayé sans le not-null et ça ne change rien.

    Pour l'instant ça fonctionne mais sans le inverse="true"

Discussions similaires

  1. relation many-to-one avec clefs composites
    Par Foub dans le forum Hibernate
    Réponses: 2
    Dernier message: 27/09/2007, 14h33
  2. relation many to one
    Par CPI_en_mousse dans le forum Hibernate
    Réponses: 4
    Dernier message: 01/06/2007, 14h09
  3. [ASP.NET 2.0] DataBinding et relation Many to one
    Par Mandotnet dans le forum ASP.NET
    Réponses: 1
    Dernier message: 18/01/2007, 13h48
  4. Relation Many-to-One dans une application JSF
    Par KooKoolen dans le forum JSF
    Réponses: 1
    Dernier message: 27/12/2006, 14h13
  5. Hibernate : suppression sur relation many to one
    Par taf dans le forum Hibernate
    Réponses: 1
    Dernier message: 23/05/2006, 13h08

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