Bonjour à tous,

Je travaille sur une application préexistante dont les standards m'imposent une clé primaire externe sur une table de jointure. Chaque table correspond à un POJO qui est mappé avec un fichier hbm.xml.

J'ai donc trois tables:
  • Dossier (PK ID_DOSS, ...)
  • Firm (PK ID_FIRM, ...),
  • DossFirm, la table de jointure (PK DOFI_ID, FK DOSS_ID, FK FIRM_ID).


Un dossier peut être lié à une série de firmes. Les mappings (abrégés)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
<class lazy="false" name="be.Dossier" table="DOSSIER">
	<id column="DOSS_ID" name="dossId" type="long" unsaved-value="0">
		<generator class="sequence">
			<param name="sequence">s530_doss_seq</param>
		</generator>
	</id>
 <!-- (...) -->
        <set name="dossierFirms" table="S530_DOSS_FIRMS" inverse="true"   cascade="all-delete-orphan" lazy="false">
	        <key column="ID_DOSS" />
	        <one-to-many class="be.DossierFirm" />
        </set>
</class>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
<class lazy="false" name="be.DossierFirm" table="DOSS_FIRMS">
	<id column="DOFI_ID" name="dossierFirmId" type="long" unsaved-value="0">
		<generator class="sequence">
			<param name="sequence">s530_dofi_seq</param>
		</generator>
	</id>
	<many-to-one name="dossier" cascade="all" class="be.DossierDetail" column="ID_DOSS" lazy="false" />
	<many-to-one name="firm" class="be.Firm"
			column="ID_FIRM" lazy="false"  />
</class>
Mon Dossier existe déjà quand je lui ajoute la collection. Le DAO (que je n'ai pas écrit moi-même) fait donc ceci:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
session.beginTransaction();
session.merge(dossier);
session.getTransaction().commit();
J'utilise une base de données Oracle, et voici le message que je reçois lorsque je tente d'insérer via ma JSP (avec Struts 1) des DossierFirm:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
11/10/18 09:07:06 Hibernate: insert into DOSS_FIRMS (ID_DOSS, ID_FIRM, DOFI_ID) values (?, ?, ?)
18/10/2011 09:07:06:464 - (org.hibernate.util.JDBCExceptionReporter:72  ) - ORA-01400: cannot insert NULL into ("BASE"."DOSS_FIRMS"."ID_DOSS")


Une idée de ce qui peut provoquer cela? Si nécessaire, je peux fournir le reste du code.

Merci d'avance!


EDIT: bon, comme toujours, ce problème m'ennuyait depuis plusieurs jours et il suffit que je me décide à poster sur un forum pour que je trouve par moi-même!

Le problème venait du fait que lors de l'instanciation de mes DossierFirm, je ne passais que l'id de la firme et l'id du dossier alors que je devais passer directement une Firm et un Dossier. Hibernate ne trouvait donc pas la PK de ces deux objets.

Merci à ceux qui m'ont lue!