Skip to content

Commit 8fc0c3c

Browse files
kobaeugeneaschauder
authored andcommitted
Add test. Polishing.
Original pull request #1629
1 parent 6d1c9be commit 8fc0c3c

File tree

3 files changed

+43
-19
lines changed

3 files changed

+43
-19
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package org.springframework.data.jdbc.core.mapping.schema;
22

3-
import java.util.Objects;
4-
53
/**
64
* Models a Foreign Key for generating SQL for Schema generation.
75
*
@@ -10,18 +8,4 @@
108
*/
119
record ForeignKey(String name, String tableName, String columnName, String referencedTableName,
1210
String referencedColumnName) {
13-
@Override
14-
public boolean equals(Object o) {
15-
if (this == o)
16-
return true;
17-
if (o == null || getClass() != o.getClass())
18-
return false;
19-
ForeignKey that = (ForeignKey) o;
20-
return Objects.equals(name, that.name);
21-
}
22-
23-
@Override
24-
public int hashCode() {
25-
return Objects.hash(name);
26-
}
2711
}

spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/mapping/schema/SchemaDiff.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ private static List<TableDiff> diffTable(Tables mappedEntities, Map<String, Tabl
9696
// Identify deleted columns
9797
tableDiff.columnsToDrop().addAll(findDiffs(mappedColumns, existingColumns, nameComparator));
9898
// Identify added columns and add columns in order. This order can interleave with existing columns.
99-
List<Column> addedColumns = new ArrayList<>(findDiffs(existingColumns, mappedColumns, nameComparator));
99+
Collection<Column> addedColumns = findDiffs(existingColumns, mappedColumns, nameComparator);
100100
for (Column column : mappedEntity.columns()) {
101101
if (addedColumns.contains(column)) {
102102
tableDiff.columnsToAdd().add(column);
@@ -107,9 +107,9 @@ private static List<TableDiff> diffTable(Tables mappedEntities, Map<String, Tabl
107107
nameComparator);
108108
Map<String, ForeignKey> existingForeignKeys = createMapping(existingTable.foreignKeys(), ForeignKey::name,
109109
nameComparator);
110-
// Identify deleted columns
110+
// Identify deleted foreign keys
111111
tableDiff.fkToDrop().addAll(findDiffs(mappedForeignKeys, existingForeignKeys, nameComparator));
112-
// Identify added columns
112+
// Identify added foreign keys
113113
tableDiff.fkToAdd().addAll(findDiffs(existingForeignKeys, mappedForeignKeys, nameComparator));
114114

115115
tableDiffs.add(tableDiff);

spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/mapping/schema/LiquibaseChangeSetWriterUnitTests.java

+40
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,39 @@ void fieldForFkShouldNotBeCreatedTwice() {
119119
assertThat(columns).extracting(ColumnConfig::getName).containsExactly("id", "tables_id");
120120
}
121121

122+
@Test // GH-1599
123+
void createForeignKeyForNestedEntities() {
124+
125+
RelationalMappingContext context = new RelationalMappingContext();
126+
context.getRequiredPersistentEntity(SetOfTables.class);
127+
128+
LiquibaseChangeSetWriter writer = new LiquibaseChangeSetWriter(context);
129+
130+
ChangeSet changeSet = writer.createChangeSet(ChangeSetMetadata.create(), new DatabaseChangeLog());
131+
132+
Optional<Change> tablesFkOptional = changeSet.getChanges().stream().filter(change -> {
133+
return change instanceof AddForeignKeyConstraintChange
134+
&& ((AddForeignKeyConstraintChange) change).getBaseTableName().equals("other_table");
135+
}).findFirst();
136+
assertThat(tablesFkOptional.isPresent()).isTrue();
137+
AddForeignKeyConstraintChange tableFk = (AddForeignKeyConstraintChange) tablesFkOptional.get();
138+
assertThat(tableFk.getBaseTableName()).isEqualTo("other_table");
139+
assertThat(tableFk.getBaseColumnNames()).isEqualTo("tables");
140+
assertThat(tableFk.getReferencedTableName()).isEqualTo("tables");
141+
assertThat(tableFk.getReferencedColumnNames()).isEqualTo("id");
142+
143+
Optional<Change> setOfTablesFkOptional = changeSet.getChanges().stream().filter(change -> {
144+
return change instanceof AddForeignKeyConstraintChange
145+
&& ((AddForeignKeyConstraintChange) change).getBaseTableName().equals("tables");
146+
}).findFirst();
147+
assertThat(setOfTablesFkOptional.isPresent()).isTrue();
148+
AddForeignKeyConstraintChange setOfTablesFk = (AddForeignKeyConstraintChange) setOfTablesFkOptional.get();
149+
assertThat(setOfTablesFk.getBaseTableName()).isEqualTo("tables");
150+
assertThat(setOfTablesFk.getBaseColumnNames()).isEqualTo("set_id");
151+
assertThat(setOfTablesFk.getReferencedTableName()).isEqualTo("set_of_tables");
152+
assertThat(setOfTablesFk.getReferencedColumnNames()).isEqualTo("id");
153+
}
154+
122155
@org.springframework.data.relational.core.mapping.Table
123156
static class VariousTypes {
124157
@Id long id;
@@ -141,6 +174,13 @@ static class Tables {
141174
Set<OtherTable> tables;
142175
}
143176

177+
@org.springframework.data.relational.core.mapping.Table
178+
static class SetOfTables {
179+
@Id int id;
180+
@MappedCollection(idColumn = "set_id")
181+
Set<Tables> setOfTables;
182+
}
183+
144184
@org.springframework.data.relational.core.mapping.Table
145185
static class DifferentTables {
146186
@Id int id;

0 commit comments

Comments
 (0)