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 :

Problème de Mapping : plusieurs à plusieurs


Sujet :

Hibernate Java

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Problème de Mapping : plusieurs à plusieurs
    Bonjour,

    J'ai les objets suivants :
    - 'Resource(String url, Set<Role> roles)'
    - 'Role(String name)'
    Une 'Resource' contient un Set de 'Role's. Un 'Role' n'a aucune référence sur les 'Resource's mais peut-être utilisé par plusieurs 'Resource's.
    J'ai fais mon ammping comme indiqué dans la référence :
    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
    <class name="xx.yy.security.Resource" table="resources">
      <id name="url"><generator class="assigned" /></id>
     
      <set name="roles" table="resources_roles">
        <key column="url" />
        <many-to-many
          class="xx.yy.beans.Role"
          column="name" 
          lazy="false" />
      </set>
    </class>
     
    <class name="xx.yy.beans.Role" table="roles">
      <id name="name"><generator class="assigned" /></id>
     
      <property name="description"/>
      <property name="enabled" type="java.lang.Boolean"/>
    </class>
    Tout se passe bien lorsque je sauve une 'Resource' et lorsque je sauve un 'Role'.

    Lorsque je fais l'association 'maResource.addRole(unRole)' et que je sauve, tout semble se passer correctement également sauf que ma table de relation reste vide.

    Si j'ajoute un nouveau (non sauvé) 'Role' pour une 'Resource' et que je sauve cette 'Resource' le 'Role' n'est pas sauvé.

    La console ne me dis rien d'autre que du debug, mes tables sont bien créées par Hibernate avec les bonnes colonnes. Je ne vais vraiemnt pas ou est mon erreur.



    Si l'un d'entre-vous à une idée, je suis preneur. Merci


    Edit : Il semblerait que Hibernate ne voie pas la contenu de ma collection (déclarée comme un Set et réalisée par un TreeSet) après qu'il ai wrappé la collection :

    2008-05-20 18:57:35,109 DEBUG [xx.yy.zz.dao.impl.spring.hibernate.GenericHibernateDao] - Saving Resource 'Resource login.html with roles : [Role Anonymous (Enabled)]'.
    2008-05-20 18:57:35,109 DEBUG [org.springframework.orm.hibernate3.SessionFactoryUtils] - Opening Hibernate Session
    2008-05-20 18:57:35,109 DEBUG [org.hibernate.impl.SessionImpl] - opened session at timestamp: 12113026551
    2008-05-20 18:57:35,109 DEBUG [org.hibernate.transaction.JDBCTransaction] - begin
    2008-05-20 18:57:35,109 DEBUG [org.hibernate.jdbc.ConnectionManager] - opening JDBC connection
    2008-05-20 18:57:35,109 DEBUG [org.hibernate.transaction.JDBCTransaction] - current autocommit status: true
    2008-05-20 18:57:35,109 DEBUG [org.hibernate.transaction.JDBCTransaction] - disabling autocommit
    2008-05-20 18:57:35,109 DEBUG [org.hibernate.jdbc.JDBCContext] - after transaction begin
    2008-05-20 18:57:35,109 DEBUG [org.springframework.orm.hibernate3.SessionFactoryUtils] - Opening Hibernate Session
    2008-05-20 18:57:35,109 DEBUG [org.hibernate.impl.SessionImpl] - opened session at timestamp: 12113026551
    2008-05-20 18:57:35,109 DEBUG [org.hibernate.event.def.DefaultSaveOrUpdateEventListener] - saving transient instance
    2008-05-20 18:57:35,109 DEBUG [org.hibernate.event.def.AbstractSaveEventListener] - generated identifier: login.html, using strategy: org.hibernate.id.Assigned
    2008-05-20 18:57:35,109 DEBUG [org.hibernate.event.def.AbstractSaveEventListener] - saving [xx.yy.zz.security.Resource#login.html]
    2008-05-20 18:57:35,125 DEBUG [org.hibernate.event.def.WrapVisitor] - Wrapped collection in role: xx.yy.zz.security.Resource.roles
    2008-05-20 18:57:35,125 DEBUG [org.springframework.orm.hibernate3.HibernateTemplate] - Eagerly flushing Hibernate session
    2008-05-20 18:57:35,125 DEBUG [org.hibernate.event.def.AbstractFlushingEventListener] - flushing session
    2008-05-20 18:57:35,125 DEBUG [org.hibernate.event.def.AbstractFlushingEventListener] - processing flush-time cascades
    2008-05-20 18:57:35,125 DEBUG [org.hibernate.event.def.AbstractFlushingEventListener] - dirty checking collections
    2008-05-20 18:57:35,125 DEBUG [org.hibernate.event.def.AbstractFlushingEventListener] - Flushing entities and processing referenced collections
    2008-05-20 18:57:35,125 DEBUG [org.hibernate.event.def.WrapVisitor] - Wrapped collection in role: xx.yy.zz.security.Resource.roles
    2008-05-20 18:57:35,140 DEBUG [org.hibernate.engine.Collections] - Collection found: [xx.yy.zz.security.Resource.roles#login.html], was: [<unreferenced>] (initialized)
    2008-05-20 18:57:35,140 DEBUG [org.hibernate.event.def.AbstractFlushingEventListener] - Processing unreferenced collections
    2008-05-20 18:57:35,140 DEBUG [org.hibernate.engine.Collections] - Found collection with unloaded owner: [<unreferenced>]
    2008-05-20 18:57:35,140 DEBUG [org.hibernate.event.def.AbstractFlushingEventListener] - Scheduling collection removes/(re)creates/updates
    2008-05-20 18:57:35,140 DEBUG [org.hibernate.event.def.AbstractFlushingEventListener] - Flushed: 1 insertions, 0 updates, 0 deletions to 1 objects
    2008-05-20 18:57:35,140 DEBUG [org.hibernate.event.def.AbstractFlushingEventListener] - Flushed: 1 (re)creations, 0 updates, 0 removals to 2 collections

    2008-05-20 18:57:35,140 DEBUG [org.hibernate.pretty.Printer] - listing entities:
    2008-05-20 18:57:35,140 DEBUG [org.hibernate.pretty.Printer] - xx.yy.zz.security.Resource{roles=[], url=login.html}
    2008-05-20 18:57:35,140 DEBUG [org.hibernate.event.def.AbstractFlushingEventListener] - executing flush
    2008-05-20 18:57:35,140 DEBUG [org.hibernate.jdbc.ConnectionManager] - registering flush begin
    2008-05-20 18:57:35,140 DEBUG [org.hibernate.persister.entity.AbstractEntityPersister] - Inserting entity: [xx.yy.zz.security.Resource#login.html]
    2008-05-20 18:57:35,140 DEBUG [org.hibernate.jdbc.AbstractBatcher] - about to open PreparedStatement (open PreparedStatements: 0, globally: 0)
    2008-05-20 18:57:35,140 DEBUG [org.hibernate.jdbc.ConnectionManager] - opening JDBC connection
    2008-05-20 18:57:35,203 DEBUG [org.hibernate.jdbc.AbstractBatcher] - preparing statement
    2008-05-20 18:57:35,203 DEBUG [org.hibernate.persister.entity.AbstractEntityPersister] - Dehydrating entity: [xx.yy.zz.security.Resource#login.html]
    2008-05-20 18:57:35,203 DEBUG [org.hibernate.type.StringType] - binding 'login.html' to parameter: 1
    2008-05-20 18:57:35,203 DEBUG [org.hibernate.jdbc.AbstractBatcher] - Executing batch size: 1
    2008-05-20 18:57:35,203 DEBUG [org.hibernate.jdbc.AbstractBatcher] - about to close PreparedStatement (open PreparedStatements: 1, globally: 1)
    2008-05-20 18:57:35,203 DEBUG [org.hibernate.jdbc.AbstractBatcher] - closing statement
    2008-05-20 18:57:35,203 DEBUG [org.hibernate.persister.collection.AbstractCollectionPersister] - Inserting collection: [xx.yy.zz.security.Resource.roles#login.html]
    2008-05-20 18:57:35,203 DEBUG [org.hibernate.persister.collection.AbstractCollectionPersister] - collection was empty
    2008-05-20 18:57:35,203 DEBUG [org.hibernate.jdbc.ConnectionManager] - registering flush end
    2008-05-20 18:57:35,203 DEBUG [org.hibernate.event.def.AbstractFlushingEventListener] - post flush
    2008-05-20 18:57:35,203 DEBUG [org.springframework.orm.hibernate3.SessionFactoryUtils] - Closing Hibernate Session
    2008-05-20 18:57:35,203 DEBUG [org.hibernate.impl.SessionImpl] - closing session
    2008-05-20 18:57:35,203 DEBUG [org.hibernate.jdbc.ConnectionManager] - performing cleanup
    2008-05-20 18:57:35,203 DEBUG [org.hibernate.jdbc.ConnectionManager] - releasing JDBC connection [ (open PreparedStatements: 0, globally: 0) (open ResultSets: 0, globally: 0)]
    2008-05-20 18:57:35,203 DEBUG [org.hibernate.jdbc.JDBCContext] - after transaction completion
    2008-05-20 18:57:35,203 DEBUG [org.hibernate.jdbc.ConnectionManager] - transaction completed on session with on_close connection release mode; be sure to close the session to release JDBC resources!
    2008-05-20 18:57:35,203 DEBUG [org.hibernate.impl.SessionImpl] - after transaction completion
    2008-05-20 18:57:35,203 DEBUG [org.springframework.orm.hibernate3.SessionFactoryUtils] - Opening Hibernate Session
    2008-05-20 18:57:35,203 DEBUG [org.hibernate.impl.SessionImpl] - opened session at timestamp: 12113026552
    2008-05-20 18:57:35,203 DEBUG [org.springframework.orm.hibernate3.HibernateTemplate] - Eagerly flushing Hibernate session
    2008-05-20 18:57:35,203 DEBUG [org.springframework.orm.hibernate3.SessionFactoryUtils] - Closing Hibernate Session
    2008-05-20 18:57:35,203 DEBUG [org.hibernate.impl.SessionImpl] - closing session
    2008-05-20 18:57:35,203 DEBUG [org.hibernate.jdbc.ConnectionManager] - connection already null in cleanup : no action
    2008-05-20 18:57:35,203 DEBUG [org.hibernate.transaction.JDBCTransaction] - commit
    2008-05-20 18:57:35,203 DEBUG [org.hibernate.impl.SessionImpl] - automatically flushing session
    2008-05-20 18:57:35,203 DEBUG [org.hibernate.jdbc.JDBCContext] - before transaction completion
    2008-05-20 18:57:35,203 DEBUG [org.hibernate.impl.SessionImpl] - before transaction completion
    2008-05-20 18:57:35,203 DEBUG [org.hibernate.transaction.JDBCTransaction] - re-enabling autocommit
    2008-05-20 18:57:35,203 DEBUG [org.hibernate.transaction.JDBCTransaction] - committed JDBC Connection
    2008-05-20 18:57:35,203 DEBUG [org.hibernate.jdbc.JDBCContext] - after transaction completion
    2008-05-20 18:57:35,203 DEBUG [org.hibernate.jdbc.ConnectionManager] - transaction completed on session with on_close connection release mode; be sure to close the session to release JDBC resources!
    2008-05-20 18:57:35,203 DEBUG [org.hibernate.impl.SessionImpl] - after transaction completion
    2008-05-20 18:57:35,203 DEBUG [xx.yy.zz.dao.impl.spring.hibernate.GenericHibernateDao] - Object 'Resource login.html with roles : []' saved as Resource with key 'login.html'.
    Edit 2 :
    En plaçant des points débugs sur chaque ligne de ma méthode save, j'ai remarqué que le contenu de ma collection disparaissait juste après le 'getHibernateTemplate().save(object)' :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public PK save(T object) throws DataAccessException {
    		logger.debug("Saving %s '%s'.", type.getSimpleName(), object);
    		PK key = (PK) getHibernateTemplate().save(object);
    		//getHibernateTemplate().flush();
    		logger.debug("Object '%s' saved as %s with key '%s'.", object, type.getSimpleName(), key);
    		return key;		 
    	}
    Dernière modification par Invité ; 20/05/2008 à 19h38.

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

Discussions similaires

  1. Mapping dans un table plusieurs-plusieurs-plusieurs
    Par Invité dans le forum Hibernate
    Réponses: 0
    Dernier message: 03/07/2009, 13h15
  2. Problème liaison plusieurs à plusieurs
    Par Anthony17 dans le forum Access
    Réponses: 16
    Dernier message: 22/05/2006, 17h12
  3. [débutant] Problème de liaison un à plusieurs
    Par Anthony17 dans le forum Access
    Réponses: 7
    Dernier message: 02/05/2006, 14h11
  4. [Mapping]relation plusieurs-vers-plusieurs
    Par berret dans le forum Hibernate
    Réponses: 2
    Dernier message: 21/01/2005, 18h44
  5. Problème requête qui renvoie plusieurs
    Par dai.kaioh dans le forum Langage SQL
    Réponses: 6
    Dernier message: 01/04/2004, 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