diff --git a/querydsl-sql-codegen/src/main/java/com/querydsl/sql/codegen/KeyDataFactory.java b/querydsl-sql-codegen/src/main/java/com/querydsl/sql/codegen/KeyDataFactory.java index 308183032..197bcc3a7 100644 --- a/querydsl-sql-codegen/src/main/java/com/querydsl/sql/codegen/KeyDataFactory.java +++ b/querydsl-sql-codegen/src/main/java/com/querydsl/sql/codegen/KeyDataFactory.java @@ -16,8 +16,8 @@ package com.querydsl.sql.codegen; import java.sql.DatabaseMetaData; import java.sql.ResultSet; import java.sql.SQLException; -import java.util.HashMap; import java.util.Map; +import java.util.TreeMap; import javax.annotation.Nullable; @@ -72,7 +72,7 @@ public class KeyDataFactory { public Map getExportedKeys(DatabaseMetaData md, String catalog, String schema, String tableName) throws SQLException { ResultSet foreignKeys = md.getExportedKeys(catalog, schema, tableName); - Map inverseForeignKeyData = new HashMap(); + Map inverseForeignKeyData = new TreeMap(); try { while (foreignKeys.next()) { String name = foreignKeys.getString(FK_NAME); @@ -101,7 +101,7 @@ public class KeyDataFactory { public Map getImportedKeys(DatabaseMetaData md, String catalog, String schema, String tableName) throws SQLException { ResultSet foreignKeys = md.getImportedKeys(catalog, schema, tableName); - Map foreignKeyData = new HashMap(); + Map foreignKeyData = new TreeMap(); try { while (foreignKeys.next()) { String name = foreignKeys.getString(FK_NAME); @@ -130,7 +130,7 @@ public class KeyDataFactory { public Map getPrimaryKeys(DatabaseMetaData md, String catalog, String schema, String tableName) throws SQLException { ResultSet primaryKeys = md.getPrimaryKeys(catalog, schema, tableName); - Map primaryKeyData = new HashMap(); + Map primaryKeyData = new TreeMap(); try { while (primaryKeys.next()) { String name = primaryKeys.getString(PK_NAME); diff --git a/querydsl-sql-codegen/src/main/java/com/querydsl/sql/codegen/MetaDataExporter.java b/querydsl-sql-codegen/src/main/java/com/querydsl/sql/codegen/MetaDataExporter.java index 7203a73ac..32c620f38 100644 --- a/querydsl-sql-codegen/src/main/java/com/querydsl/sql/codegen/MetaDataExporter.java +++ b/querydsl-sql-codegen/src/main/java/com/querydsl/sql/codegen/MetaDataExporter.java @@ -356,7 +356,7 @@ public class MetaDataExporter { Map foreignKeyData = keyDataFactory .getImportedKeys(md, catalog, schema, tableName); if (!foreignKeyData.isEmpty()) { - Collection foreignKeysToGenerate = new HashSet(); + Collection foreignKeysToGenerate = new LinkedHashSet(); for (ForeignKeyData fkd : foreignKeyData.values()) { if (namingStrategy.shouldGenerateForeignKey(schemaAndTable, fkd)) { foreignKeysToGenerate.add(fkd); diff --git a/querydsl-sql-codegen/src/test/java/com/querydsl/sql/codegen/KeyDataFactoryTest.java b/querydsl-sql-codegen/src/test/java/com/querydsl/sql/codegen/KeyDataFactoryTest.java index c92d50e6c..ab61daef1 100644 --- a/querydsl-sql-codegen/src/test/java/com/querydsl/sql/codegen/KeyDataFactoryTest.java +++ b/querydsl-sql-codegen/src/test/java/com/querydsl/sql/codegen/KeyDataFactoryTest.java @@ -13,11 +13,13 @@ */ package com.querydsl.sql.codegen; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import java.sql.DatabaseMetaData; import java.sql.SQLException; +import java.util.Iterator; import java.util.Map; import org.junit.Test; @@ -43,11 +45,13 @@ public class KeyDataFactoryTest extends AbstractJDBCTest { statement.execute("create table employee(" + "id INT, " + "superior_id int, " + + "superior_id2 int, " + "survey_id int, " + "survey_name varchar(30), " + "CONSTRAINT PK_employee PRIMARY KEY (id), " + "CONSTRAINT FK_survey FOREIGN KEY (survey_id, survey_name) REFERENCES survey(id,name), " - + "CONSTRAINT FK_superior FOREIGN KEY (superior_id) REFERENCES employee(id))"); + + "CONSTRAINT FK_superior2 FOREIGN KEY (superior_id) REFERENCES employee(id), " + + "CONSTRAINT FK_superior1 FOREIGN KEY (superior_id2) REFERENCES employee(id))"); KeyDataFactory keyDataFactory = new KeyDataFactory(new DefaultNamingStrategy(), "Q","","test", false); @@ -58,15 +62,19 @@ public class KeyDataFactoryTest extends AbstractJDBCTest { // primary key Map primaryKeys = keyDataFactory.getPrimaryKeys(md, null, null, "EMPLOYEE"); assertFalse(primaryKeys.isEmpty()); - // inverse foreign keys + // inverse foreign keys sorted in abc Map exportedKeys = keyDataFactory.getExportedKeys(md, null, null, "EMPLOYEE"); - assertFalse(exportedKeys.isEmpty()); - assertTrue(exportedKeys.containsKey("FK_SUPERIOR")); - // foreign keys + assertEquals(2, exportedKeys.size()); + Iterator exportedKeysIterator = exportedKeys.keySet().iterator(); + assertEquals("FK_SUPERIOR1", exportedKeysIterator.next()); + assertEquals("FK_SUPERIOR2", exportedKeysIterator.next()); + // foreign keys sorted in abc Map importedKeys = keyDataFactory.getImportedKeys(md, null, null, "EMPLOYEE"); - assertFalse(importedKeys.isEmpty()); - assertTrue(importedKeys.containsKey("FK_SUPERIOR")); - assertTrue(importedKeys.containsKey("FK_SURVEY")); + assertEquals(3, importedKeys.size()); + Iterator importedKeysIterator = importedKeys.keySet().iterator(); + assertEquals("FK_SUPERIOR1", importedKeysIterator.next()); + assertEquals("FK_SUPERIOR2", importedKeysIterator.next()); + assertEquals("FK_SURVEY", importedKeysIterator.next()); // SURVEY