Gli inserimenti figlio vedrebbero qualsiasi genitore che è stato sottoposto a commit o è stato precedentemente inserito dalla stessa transazione (indipendentemente dal fatto che sia stato eseguito il commit).
Una cosa da verificare è se l'inserimento del genitore sta derivando automaticamente il valore della chiave primaria (ad esempio tramite un trigger).
Cioè, emetti statementINSERT nei valori di Contracts (contract_sequence_number, ...) (10437, ...);
ma un trigger determina un nuovo numero_sequenza_contratto dalla sequenza e gli fornisce effettivamente la chiave primaria 10438 (o qualsiasi altra cosa).
Un altro problema potrebbe essere qualsiasi livello ORM che sta rovinando il problema non emettendo gli inserti nell'ordine corretto o utilizzando connessioni diverse su un pool per una singola "transazione".
Controlla anche che l'inserimento del genitore non abbia restituito un errore.
Prova a eseguire una transazione di esempio tramite un client convenzionale (come SQL*Plus) e verifica se funziona. Se l'inserimento figlio non riesce, basta interrogare la voce più recente del contratto (ad es. dove numero_sequenza_contratto> 10400) e verificare se l'inserimento è riuscito.