-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 7 posts ] 
Author Message
 Post subject: many-to-many
PostPosted: Mon Jun 20, 2005 9:26 am 
Regular
Regular

Joined: Mon Apr 25, 2005 5:36 am
Posts: 103
salut

J'ai deux classes en relations <many-to-many>.

Dans ma database, j'ai donc 3 tables, une qui représente chaque classe plus une qui représente la table associée.

Comment faut -il faire pour insérer des valeurs dans la table associé?


Top
 Profile  
 
 Post subject: pb avec le many-to-many
PostPosted: Mon Jun 20, 2005 11:18 am 
Regular
Regular

Joined: Mon Apr 25, 2005 5:36 am
Posts: 103
voilà le code que j'exécute ::


Set ensemble_projet = ressource.getProjets();
//projet est un objet chargé au préalable
ensemble_projet.add(projet);

ressource.setProjets(ensemble_projet);
sess.update(projet);

Il ne se passe rien dans ma database pk?


merci


Top
 Profile  
 
 Post subject:
PostPosted: Mon Jun 20, 2005 12:24 pm 
Hibernate Team
Hibernate Team

Joined: Thu Dec 18, 2003 9:55 am
Posts: 1977
Location: France
Set ensemble_projet = ressource.getProjets();
puis
ressource.setProjets(ensemble_projet);

bizarre ta logique, es tu sure de maitriser la notion d'instance? ce n'est pas de l'ironie ton setProjects n'a pas de sens ou ne sert a rien.

As tu enclenché le cascade sur cette collection? sur le many to many?

_________________
Anthony,
Get value thanks to your skills: http://www.redhat.com/certification


Top
 Profile  
 
 Post subject:
PostPosted: Tue Jun 21, 2005 4:08 am 
Regular
Regular

Joined: Mon Apr 25, 2005 5:36 am
Posts: 103
anthony wrote:
Set ensemble_projet = ressource.getProjets();
puis
ressource.setProjets(ensemble_projet);

bizarre ta logique, es tu sure de maitriser la notion d'instance? ce n'est pas de l'ironie ton setProjects n'a pas de sens ou ne sert a rien.

As tu enclenché le cascade sur cette collection? sur le many to many?


Dans mon schéma, j'ai une ressource peut appartenir à plusieurs projet et un projet peut appartenir à plusieurs ressources.

J'ai créé une fonction qui ajoute une ressource à un projet et une fonction qui ajoute un oprojet à une ressource

là je suis dans ma deuxième fonction :

public void AddProjet(Ressource ressourceBean, Projet projetBean){

Integer ident_proj = projetBean.getId();
Projet projet = (Projet) sess.get(Projet.class, ident_proj);
Integer ident_ress = ressourceBean.getId();
Ressource ressource = (Ressource) sess.get(Ressource.class, ident_ress);

//ma logique :

Set ensemble_projet = ressource.getProjets();
// Je récupère l'ensemble des projets avec getProjets()

ensemble_projet.add(projet);
//J'ajoute un projet

ressource.setProjets(ensemble_projet);
//Je met à jour l'ensemble des projet

sess.update(projet);
}


//çà me parait correct alors pk ma base données n'est-elle pas modifiée?


merci


Top
 Profile  
 
 Post subject:
PostPosted: Tue Jun 21, 2005 4:45 am 
Newbie

Joined: Wed Dec 15, 2004 10:23 am
Posts: 10
julientarrago wrote:
Dans mon schéma, j'ai une ressource peut appartenir à plusieurs projet et un projet peut appartenir à plusieurs ressources.

J'ai créé une fonction qui ajoute une ressource à un projet et une fonction qui ajoute un oprojet à une ressource

là je suis dans ma deuxième fonction :

public void AddProjet(Ressource ressourceBean, Projet projetBean){

Integer ident_proj = projetBean.getId();
Projet projet = (Projet) sess.get(Projet.class, ident_proj);
Integer ident_ress = ressourceBean.getId();
Ressource ressource = (Ressource) sess.get(Ressource.class, ident_ress);

//ma logique :

Set ensemble_projet = ressource.getProjets();
// Je récupère l'ensemble des projets avec getProjets()

ensemble_projet.add(projet);
//J'ajoute un projet

ressource.setProjets(ensemble_projet);
//Je met à jour l'ensemble des projet

sess.update(projet);
}


//çà me parait correct alors pk ma base données n'est-elle pas modifiée?


merci


Quelles sont les modifications que du veux mettre à jour sur le projet ?
Pour les updates de ressource et ensemble_projet, tu peux faire un :
Code:
   sess.update(ressource);
   sess.update(ensemble_projet);


Comme anthony, je trouve ta logique blizzard:
anthony wrote:
Set ensemble_projet = ressource.getProjets();
puis
ressource.setProjets(ensemble_projet);

bizarre ta logique, es tu sure de maitriser la notion d'instance? ce n'est pas de l'ironie ton setProjects n'a pas de sens ou ne sert a rien.

As tu enclenché le cascade sur cette collection? sur le many to many?

Quel est ton mapping ? Utilise-tu le cascade ?
Jer.


Top
 Profile  
 
 Post subject:
PostPosted: Tue Jun 21, 2005 5:50 am 
Regular
Regular

Joined: Mon Apr 25, 2005 5:36 am
Posts: 103
oui je viens de regarder un peu sur le net et je vous l'accorde j'ai fait n'importe quoi...


je viens de changer, mon code reseemble à çà:


Session session = HibernateUtil.currentSession();
Transaction tx = session.beginTransaction();

Integer ident_proj = projetBean.getId();
Integer ident_ress = ressourceBean.getId();

Ressource ressource=(Ressource) session.load(Ressource.class, ident_ress);
Projet projet= (Projet) session.load(Projet.class, ident_proj);

ressource.addProjet(projet);

tx.commit();

HibernateUtil.closeSession();



public void addProjet(Projet projet) {
Projets.add(projet);
projet.getRessources().add(this);
}




merci de votre aide quand même.


Top
 Profile  
 
 Post subject:
PostPosted: Wed Jun 22, 2005 5:32 am 
Newbie

Joined: Wed Jun 22, 2005 5:11 am
Posts: 3
Bonjour,
J'ai je même problème que jullien je n'arrive pas à remplir ma table associée à 2 classes en relation many-to-many. Voilà ce que je fais mais j'ai peut-être compris de travers:
Agent.hbm

Code:
<hibernate-mapping>

<class name="com.minosis.hibernate.Agent" table="AGENT">

<id name="uid" type="string" unsaved-value="any" >
<column name="uid" sql-type="varchar(30)" not-null="true"/>
<generator class="assigned" />
</id>

[....]différents <porperty>

<set name="habilitation" table="agent_hab" lazy="false">
  <key>
   <column name="uid_agent" sql-type="varchar(30)" not-null="true"/>
  </key>
  <many-to-many class="com.minosis.hibernate.Habilitations" >
   <column name="hab_id" not-null="true"/>
  </many-to-many>
</set>

</class>

<class name="com.minosis.hibernate.Habilitations" table="habilitation">
  <id name="id" column="id" type="integer" unsaved-value="any" >
   <generator class="increment">
    <param name="increment">habilitation_id_seq</param>
   </generator>
  </id>
        <property name="nom" type="string">
          <column name="nom" sql-type="varchar(30)" not-null="true"/>
        </property>
        <property name="parametre" type="string">
    <column name="parametre" sql-type="varchar(255)" />
      </property>
  <set name="AGENT" table="agent_hab" inverse="true" lazy="false">
   <key>
     <column name="hab_id" not-null="true"/>
    </key>
   <many-to-many class="com.minosis.hibernate.Agent" >
     <column name="uid_agent" sql-type="varchar(30)" not-null="true"/>
    </many-to-many>
  </set>
</class>

</hibernate-mapping>


Et ensuite dans mon code je fais pour chaque agent
Code:
  Session session = HibernateUtil.currentSession();
  Transaction tx = session.beginTransaction();

[...]

   agent.setUid(ag.getUid());
   [...]
   agent.setHabilitation(setHab);   
   session.saveOrUpdate(agent);


puis pour chaque habilitation:
Code:
   habilitation.setNom(hab.getNomservice());
   habilitation.setParametre(hab.getPorts());
   habilitation.setAGENT(setAgent);
   session.saveOrUpdate(habilitation);

[...]

  tx.commit();
  HibernateUtil.closeSession();


Je precise que les tables Agents et habilitation sont correctement remplies.
les Set sont apparemment exact(j'ai pas pu verifier pour tout le monde mais ca à l'air juste) mais j'ai une erreur comme cela
Code:
Hibernate: insert into agent_hab (uid_agent, hab_id) values (?, ?)
22 juin 2005 11:02:41 net.sf.hibernate.impl.SessionImpl execute
GRAVE: Could not synchronize database state with session
net.sf.hibernate.MappingException: No persister for: SQLServer.habilitation
at net.sf.hibernate.impl.SessionFactoryImpl.getPersister(SessionFactoryImpl.java:347)
at net.sf.hibernate.impl.SessionImpl.getClassPersister(SessionImpl.java:2690)
at net.sf.hibernate.impl.SessionImpl.getPersister(SessionImpl.java:2697)
at net.sf.hibernate.impl.SessionImpl.getEntityIdentifierIfNotUnsaved(SessionImpl.java:2759)
at net.sf.hibernate.type.EntityType.getIdentifier(EntityType.java:66)
at net.sf.hibernate.type.ManyToOneType.nullSafeSet(ManyToOneType.java:47)
at net.sf.hibernate.collection.AbstractCollectionPersister.writeElement(AbstractCollectionPersister.java:384)
at net.sf.hibernate.collection.Set.writeTo(Set.java:226)
at net.sf.hibernate.collection.AbstractCollectionPersister.recreate(AbstractCollectionPersister.java:523)
at net.sf.hibernate.impl.ScheduledCollectionRecreate.execute(ScheduledCollectionRecreate.java:23)
at net.sf.hibernate.impl.SessionImpl.executeAll(SessionImpl.java:2418)
at net.sf.hibernate.impl.SessionImpl.execute(SessionImpl.java:2375)
at net.sf.hibernate.impl.SessionImpl.flush(SessionImpl.java:2240)
at net.sf.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:61)


Ai-je fais une erreur de compréhension ou alors mon problème vient d'ailleurs???

Merci


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 7 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.