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 :arf:
J'ai un objet A qui contient une collection d'objet B
Mon mapping est le suivant :
Code:
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:
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) |
:aie:
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:
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 !