Bonjour,
Je vais simplifier mon modèle à l'extrême, pour expliquer mon problème

J'ai plusieurs entités, A B et C avec une relation ManyToOne entre B et A, et aussi B et C. En gros, on pourrait dire qu'il y a une relation ManyToMany entre A et C mais la table de liaison contient des champs supplémentaires bref, B contient les identifiants A_ID et C_ID. Et même, il peut y avoir doublon sur le couple A_ID et C_ID dans cette table B, on est donc au delà du ManyToMany. Donc B avec une relation ManyToOne avec A et aussi ManyToOne avec C.
Mais ces 3 entités sont aussi liées à D, aussi avec une relation ManyToOne dans les 3 cas. C'est redondant j'en suis conscient mais à ce jour c'est fait ainsi. Il y a un champ D_ID dans les 3 entités A B et C, et des clés étrangères en bdd.

Côté java les relations sont bidirectionnelles, donc dans l'entité D j'ai un Set<A> un Set<B> un Set<C> et quand je persiste D je m'attends à ce que toutes les entités A B et C liées soient persistée aussi en BDD. ça marche "presque" sauf que l'on a souvent des ID null dans les tables liées. C'est permis en bdd pour l'instant donc ça passe; et lorsque j'ajoute une contrainte NOT NULL sur ces champs, comme prévu j'ai une exception oracle lors de l'insertion, ou une exception hibernate si j'ajoute dans l'annotation 'nullable = false'

Je ne sais pas comment corriger cela, je voudrais dire à hibernate de persister d'abords l'entité D, puis les A et les C, et en dernier les B qui ont besoin des A_ID et C_ID mais je ne sais pas comment faire cela, si c'est possible ?

Merci pour vos conseils