diff --git a/io.sc.platform.jdbc.schemacrawler/src/main/java/io/sc/platform/jdbc/schemacrawler/MetaDataLoaderImpl.java b/io.sc.platform.jdbc.schemacrawler/src/main/java/io/sc/platform/jdbc/schemacrawler/MetaDataLoaderImpl.java
index a2005c31..a2c56429 100644
--- a/io.sc.platform.jdbc.schemacrawler/src/main/java/io/sc/platform/jdbc/schemacrawler/MetaDataLoaderImpl.java
+++ b/io.sc.platform.jdbc.schemacrawler/src/main/java/io/sc/platform/jdbc/schemacrawler/MetaDataLoaderImpl.java
@@ -149,6 +149,19 @@ public class MetaDataLoaderImpl implements MetaDataLoader {
try{rs.close();} catch (SQLException e) {}
try{connection.close();} catch (SQLException e) {}
}
+
+ CollectionUtil.bubbleSort(result,new Comparator
() {
+ @Override
+ public int compare(Table o1, Table o2) {
+ if(o1.isParentOf(o2)) {
+ return -1;
+ }else if(o1.isChildOf(o2)) {
+ return 1;
+ }else {
+ return o1.getName().compareTo(o2.getName());
+ }
+ }
+ });
return result;
}
diff --git a/io.sc.platform.jdbc/src/main/java/io/sc/platform/jdbc/meta/support/Table.java b/io.sc.platform.jdbc/src/main/java/io/sc/platform/jdbc/meta/support/Table.java
index 531cbcda..84750b97 100644
--- a/io.sc.platform.jdbc/src/main/java/io/sc/platform/jdbc/meta/support/Table.java
+++ b/io.sc.platform.jdbc/src/main/java/io/sc/platform/jdbc/meta/support/Table.java
@@ -13,6 +13,35 @@ public class Table {
private String selfReferencePrimaryKeyColumnName;
private String selfReferenceForeignKeyColumnName;
+ public boolean isParentOf(Table childTable){
+ if(childTable==null){ return false; }
+ List foreignKeys =childTable.getForeignKeys();
+ if(foreignKeys==null || foreignKeys.isEmpty()){
+ return false;
+ }
+ for(ForeignKey foreignKey : foreignKeys){
+ if(foreignKey.getPrimaryKeyTableName().equalsIgnoreCase(this.getName())){
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public boolean isChildOf(Table parentTable){
+ if(parentTable==null){ return false; }
+ List foreignKeys =this.getForeignKeys();
+ if(foreignKeys==null || foreignKeys.isEmpty()){
+ return false;
+ }
+ for(ForeignKey foreignKey : foreignKeys){
+ if(foreignKey.getPrimaryKeyTableName().equalsIgnoreCase(parentTable.getName())){
+ return true;
+ }
+ }
+ return false;
+ }
+
+
public String getName() {
return name;
}