@@ -119,6 +119,39 @@ void fieldForFkShouldNotBeCreatedTwice() {
119
119
assertThat (columns ).extracting (ColumnConfig ::getName ).containsExactly ("id" , "tables_id" );
120
120
}
121
121
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
+
122
155
@ org .springframework .data .relational .core .mapping .Table
123
156
static class VariousTypes {
124
157
@ Id long id ;
@@ -141,6 +174,13 @@ static class Tables {
141
174
Set <OtherTable > tables ;
142
175
}
143
176
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
+
144
184
@ org .springframework .data .relational .core .mapping .Table
145
185
static class DifferentTables {
146
186
@ Id int id ;
0 commit comments