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 !