public static ForeignKey generateForeignKey(
RuntimeModelCreationContext creationContext,
org.hibernate.mapping.ForeignKey bootFk) {
final Table runtimeReferencingTable = creationContext.getDatabaseObjectResolver().resolveTable( bootFk.getReferencedTable() );
final Table runtimeTargetTable = creationContext.getDatabaseObjectResolver().resolveTable( bootFk.getTargetTable() );
final ForeignKey.Builder runtimeFkBuilder = new ForeignKey.Builder(
bootFk.getName(),
bootFk.isCreationEnabled(),
bootFk.isReferenceToPrimaryKey(),
bootFk.isCascadeDeleteEnabled(),
bootFk.getKeyDefinition(),
runtimeReferencingTable,
runtimeTargetTable
);
final Iterator<MappedColumn> bootTargetColumnItr = bootFk.getTargetColumns().iterator();
for ( MappedColumn bootReferencedColumn : bootFk.getReferencedColumns() ) {
assert bootTargetColumnItr.hasNext();
final MappedColumn bootTargetColumn = bootTargetColumnItr.next();
runtimeFkBuilder.addColumnMapping(
creationContext.getDatabaseObjectResolver().resolveColumn( bootReferencedColumn ),
creationContext.getDatabaseObjectResolver().resolveColumn( bootTargetColumn )
);
}
return runtimeFkBuilder.build();
}
}