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 :

Rafraichir une collection Mappé


Sujet :

Hibernate Java

  1. #1
    Membre actif Avatar de maloups
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 332
    Points : 208
    Points
    208
    Par défaut Rafraichir une collection Mappé
    Bonjour,

    Je suis confronté à un problème que je n'arrive vraiment pas à résoudre même en bidouillant mon code dans tous les sens

    J'ai un objet A qui contient une collection d'objet B
    Mon mapping est le suivant :
    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
     
    <hibernate-mapping package="bidule">
    	<class name="A" table="A" lazy="false">
    		<id name="id" column="A_ID" type="long">
    			<generator class="native">
    				<param name="sequence">SEQ_A</param>
    			</generator>
    		</id>
    		<bag name="collectionDeB" table="B" lazy="true">
    			<key>
    				<column name="A_ID"/>
    			</key>
    			<one-to-many class="bidule.B" />
    		</bag>
    	</class>
    </hibernate-mapping>
    Ce mapping fonctionne plutot bien

    Mon problème est le suivant :
    Je crée un objet A (sans collection d'objet B)
    Puis, dans une autre page de mon appli, je crée un objet B faisant référence à l'objet A précédement créé
    Je sauvegarde mon objet B, je retourne sur mon objet A que je sauvegarde sans ajouter aucune modif
    Et là, j'ai un jolie message d'erreur qui me dis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Caused by: java.sql.BatchUpdateException: ORA-01407: impossible de mettre à jour ("Ma_BASE"."B"."A_ID") avec NULL
     
    	at oracle.jdbc.driver.DatabaseError.throwBatchUpdateException(DatabaseError.java:343)
    	at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:10656)
    	at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeBatch(NewProxyPreparedStatement.java:1723)
    	at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48)
    	at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:246)


    En faisant un peu de débug, j'ai pu me rendre compte qu'avant d'enregistrer mon objet A pour la dernière fois, la collection de B de cette objet est vide alors que j'ai créé un objet B précédement....

    Je pense que le pb vient de là... En effet, en tentant d'enregistré mon objet A, hibernate voit en base l'objet B lié à mon objet A et tente de le mettre à jour avec un id NULL.... (Pure hypothèse, mais j'en suis à ce stade)

    J'ai tenté de forcer le chargement de ma collection de B à l'aide de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Hibernate.initialize(A.getCollectionDeB());
    Mais pas mieux....

    J'ai essayé de charger les objets B depuis la base et de les affecters à mon objets A avant l'enregistrement, mais là, j'ai une erreur me disant qu'un objet avec le même identifiant est déjà en session.....

    Je sais pas trop comment m'en sortir...

    Si quelqu'un a une idée, je suis vraiment preneur !!!!!!!

    Merci d'avance !

  2. #2
    Membre actif Avatar de maloups
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 332
    Points : 208
    Points
    208
    Par défaut
    Mon mapping ne fonctionnait pas si bien que ca après tout

    Quelque chose comme ca fonctionne beaucoup mieux !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <hibernate-mapping package="bidule">
    	<class name="A" table="A" lazy="false">
    		<id name="id" column="A_ID" type="long">
    			<generator class="native">
    				<param name="sequence">SEQ_A</param>
    			</generator>
    		</id>
    		<bag name="collectionDeB" table="B" lazy="true" inverse="true">
    			<key column="A_ID"/>
    			<one-to-many class="bidule.B" />
    		</bag>
    	</class>
    </hibernate-mapping>

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

Discussions similaires

  1. [API] Rafraichir une fenetre ?
    Par laurent_h dans le forum Windows
    Réponses: 2
    Dernier message: 17/04/2004, 23h26
  2. [VB6]Valeurs une collection renvoyée par la fonction d'une classe
    Par jacma dans le forum VB 6 et antérieur
    Réponses: 14
    Dernier message: 30/03/2004, 11h04
  3. [VB6] Sauvegarder une collection d'objets
    Par Sayagh dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 19/09/2003, 11h58
  4. Comment créér une collection sous Delphi
    Par PsyKroPack dans le forum Langage
    Réponses: 6
    Dernier message: 11/02/2003, 13h20
  5. [VB6] Modifier la clé d'un élément d'une collection
    Par Ricou13 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 21/11/2002, 14h49

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