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 :

Many To Many : Cas simple (débutant)


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 66
    Par défaut Many To Many : Cas simple (débutant)
    Bonjour,

    J'essai de faire ma première relation many-to-many mais je rencontre un problème. A la base, j'ai 2 classes, une classe "SUBSCRIBER" et une autre "FEED". Un SUBSCRIBER peut s'abonner à un ou plusieurs FEED (rss), et un FEED peut-être utilisé par plusieurs SUBSCRIBER ... donc le but évident est de se trouver au final avec une 3ème base de données avec 2 clés étrangères (l'id du RSS et l'id du SUBSCRIBER) créée par Hibernate.

    Voici mon code de configuration :
    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
    <class name="FeedleClient.Feed, FeedleClient" table="Feed">
        <id name="Id">
          <generator class="native" />
        </id>
        <property name="Url" not-null="true" />
        <bag name="NewsList" fetch="join" cascade="all">
          <key column="FK_Feed" />
          <one-to-many class="FeedleClient.News, FeedleClient" />
        </bag>
        <bag name="SubscriptionsList" table="Subscription" fetch="join" cascade="all">
          <key column="FK_Feed" />
          <many-to-many class="FeedleClient.Subscriber, FeedleClient" />
        </bag>
      </class>
      <class name="FeedleClient.Subscriber, FeedleClient" table="Subscriber">
        <id name="Id">
          <generator class="native" />
        </id>
        <property name="Login" not-null="true" />
        <property name="Password" not-null="true" />
        <bag name="SubscriptionsList" table="Subscription" fetch="join" cascade="all">
          <key column="FK_Subscriber" />
          <many-to-many class="FeedleClient.Feed, FeedleClient" />
        </bag>
      </class>
    C'est pas loin de marcher, car j'obtiens bien ma 3ème table. Le problème survient quand j'appelle le IList de SUBSCRIBER pour lui "Add" un FEED. J'ai l'erreur :
    InnerException = {"Cannot insert the value NULL into column 'FK_Feed', table 'Feedle.dbo.Subscription'; column does not allow nulls. INSERT fails.\r\nThe statement has been terminated."}
    Je suis débutant avec Hibernate, donc ...
    Merci de votre aide !

  2. #2
    Membre éclairé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Mars 2005
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2005
    Messages : 363
    Par défaut
    Tu peux mettre ton code stp car à priori tu veux insérer un enregistrement qui a une valeur nulle pour ta Foreign Key ce qui est interdit.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 66
    Par défaut
    En effet, je m'en doutais bien, mais je ne sais pas comment procéder. Pour l'instant, je fais comme ça (et ça ne marche pas) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Subscriber client = new Subscriber("pierre", "pwdpwd");
    Feed feed = new Feed("http://...");
    session.SaveOrUpdate(feed);
    session.SaveOrUpdate(client);
    transaction.Commit();
    client.SubscriptionsList.Add(feed);
    session.SaveOrUpdate(client);
    transaction.Commit();
    Ici le client est enregistré, le feed est enregistré, et ensuite je veux créer une entrée dans SubscriptionList qui devrait prendre à la fois l'ID du client et l'ID du feed. J'obtiens l'erreur : "[System.ObjectDisposedException] = {"Cannot access a disposed object.\r\nObject name: 'AdoTransaction'."}".

    Ma façon de procéder ici est mauvaise, trop complexe alors que c'est un cas simple. En plus j'ai une erreur Quelle est la bonne solution et la meilleure façon de procéder ? Merci

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 66
    Par défaut
    J'ai trouvé la réponse à mon problème, il s'agissait de définir mieux les clés étrangères exportées. Par exemple, pour ma class feed, je dois définir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <bag name="SubscriptionsList" table="Subscription" fetch="join" cascade="all">
          <key column="FK_Feed" />
          <many-to-many class="FeedleClient.Subscriber, FeedleClient" column="FK_Subscriber" />
        </bag>

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/12/2014, 10h19
  2. Cas de relation Many to Many pas du tout trivial
    Par pierick dans le forum SSAS
    Réponses: 2
    Dernier message: 13/07/2011, 10h28
  3. Un peu de mal a comprendre le concepte "one-to-many" et "many-to-many"
    Par chriscoolletoubibe dans le forum Hibernate
    Réponses: 4
    Dernier message: 29/03/2007, 18h50
  4. [EJB2.1 Entity] [XDoclet][JBoss] CMR - Many to Many Relation
    Par dauggui dans le forum Java EE
    Réponses: 4
    Dernier message: 24/04/2006, 11h45
  5. [hibernate]relation many-to-many
    Par quilo dans le forum Hibernate
    Réponses: 5
    Dernier message: 20/12/2005, 10h07

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