I'm still unsure as to the definitive reason for the exception however I have managed to resolve it for now:
The exception may have to do with this:
and I managed to resolve it with the following code:
List<DatabaseTable> tableInsertOrder = new ArrayList<DatabaseTable>();
I believe this was changed for bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=248858 in EclipseLink 1.1 so that EclipseLink would respect that when calling addForeignKeyFieldNameForMultipleTable(source, target), the target should be inserted first before the source to conform to any constraints that might exist as it does with any other source->target relationship.
You can correct this by calling
instead, as this specifies "FILETOOL.ID" references "CORETOOL.CORETOOLID" - your errors seem to suggest CORETOOL is the main table.
Your workaround of specifying the setMultipleTableInsertOrder gets around the check and insert order calculation. This works likely because your database does not have a constraint set on the CORETOOL -FILETOOL relationship, so it doesn't matter which is inserted first.