88import io .github .ngbsn .util .Util ;
99import org .apache .commons .text .WordUtils ;
1010
11- import java .util .*;
11+ import java .util .ArrayList ;
12+ import java .util .HashSet ;
13+ import java .util .List ;
14+ import java .util .Optional ;
1215import java .util .stream .Collectors ;
1316import java .util .stream .Stream ;
1417
@@ -26,7 +29,7 @@ private UniDirectionalMappingsGenerator() {
2629 * @param table Table model
2730 * @param foreignKeyConstraint ForeignKeyConstraint model
2831 */
29- static void addBothSideUniDirectionalMappings (Table table , ForeignKeyConstraint foreignKeyConstraint ) {
32+ static void addBothSideUniDirectionalMappings (final Table table , final ForeignKeyConstraint foreignKeyConstraint ) {
3033 Table referencedTable = ModelGenerator .getTablesMap ().get (foreignKeyConstraint .getReferencedTableName ().replaceAll ("[\" ']" , "" ));
3134
3235 //In the Child table, create a new column having field name as Parent(Referenced) Table.
@@ -49,7 +52,7 @@ static void addBothSideUniDirectionalMappings(Table table, ForeignKeyConstraint
4952 //get EmbeddedId for this table
5053 Optional <EmbeddableClass > optionalEmbeddableId = table .getEmbeddableClasses ().stream ().filter (EmbeddableClass ::isEmbeddedId ).findFirst ();
5154 EmbeddableClass embeddableId = optionalEmbeddableId .orElse (null );
52- Set <Column > allPrimaryKeyColumns = getAllPrimaryKeys (table , embeddableId ); //get all primary keys
55+ List <Column > allPrimaryKeyColumns = getAllPrimaryKeys (table , embeddableId ); //get all primary keys
5356
5457 //Case: Composite Foreign key
5558 if (foreignKeyConstraint .getColumns ().size () > 1 ) {
@@ -62,7 +65,8 @@ static void addBothSideUniDirectionalMappings(Table table, ForeignKeyConstraint
6265 }
6366 }
6467
65- private static void handleSingleForeignKey (Table table , ForeignKeyConstraint foreignKeyConstraint , Column parentTableField , Set <Column > allPrimaryKeyColumns ) {
68+ private static void handleSingleForeignKey (final Table table , final ForeignKeyConstraint foreignKeyConstraint ,
69+ final Column parentTableField , final List <Column > allPrimaryKeyColumns ) {
6670 //Get the foreign key column from the table
6771 Optional <Column > optionalColumn = table .getColumns ().stream ().filter (column -> column .getColumnName () != null && column .getColumnName ().equals (foreignKeyConstraint .getColumns ().get (0 ))).findFirst ();
6872 if (optionalColumn .isPresent ()) {
@@ -85,18 +89,19 @@ private static void handleSingleForeignKey(Table table, ForeignKeyConstraint for
8589 parentTableField .getAnnotations ().add (JoinColumnAnnotation .builder ().name (foreignKeyConstraint .getColumns ().get (0 )).referencedColumnName (foreignKeyConstraint .getReferencedColumns ().get (0 )).build ().toString ());
8690 }
8791
88- private static void handleCompositeForeignKey (Table table , ForeignKeyConstraint foreignKeyConstraint , Column parentTableField , EmbeddableClass embeddableId , Set <Column > allPrimaryKeyColumns ) {
89- Set <Column > setOfForeignKeyColumns = setOfForeignKeys (table , foreignKeyConstraint );
92+ private static void handleCompositeForeignKey (final Table table , final ForeignKeyConstraint foreignKeyConstraint , final Column parentTableField ,
93+ final EmbeddableClass embeddableId , final List <Column > allPrimaryKeyColumns ) {
94+ List <Column > listOfForeignKeyColumns = listOfForeignKeys (table , foreignKeyConstraint );
9095 //Case: Shared Composite Primary Key
9196 //If composite foreign key is inside the composite primary key, don't remove them from table.
9297 //This case assumes there is a primary composite key
9398 //Add a @MapsId annotation to the referenced table field
94- if (embeddableId != null && allPrimaryKeyColumns .containsAll (setOfForeignKeyColumns )) {
95- handleSharedCompositePrimaryKey (table , parentTableField , embeddableId , setOfForeignKeyColumns );
99+ if (embeddableId != null && new HashSet <>( allPrimaryKeyColumns ) .containsAll (listOfForeignKeyColumns )) {
100+ handleSharedCompositePrimaryKey (table , parentTableField , embeddableId , listOfForeignKeyColumns );
96101 } else {
97102 //There is no primary Composite key
98103 //If composite foreign key is not inside the composite primary key, then remove it from the table
99- setOfForeignKeyColumns .forEach (column -> table .getColumns ().remove (column ));
104+ listOfForeignKeyColumns .forEach (column -> table .getColumns ().remove (column ));
100105 }
101106
102107 List <JoinColumnAnnotation > joinColumns = new ArrayList <>();
@@ -108,7 +113,8 @@ private static void handleCompositeForeignKey(Table table, ForeignKeyConstraint
108113 parentTableField .getAnnotations ().add (JoinColumnsAnnotation .builder ().joinColumns (joinColumns ).build ().toString ());
109114 }
110115
111- private static void handleSharedCompositePrimaryKey (Table table , Column parentTableField , EmbeddableClass embeddableId , Set <Column > setOfForeignKeyColumns ) {
116+ private static void handleSharedCompositePrimaryKey (final Table table , final Column parentTableField ,
117+ final EmbeddableClass embeddableId , final List <Column > setOfForeignKeyColumns ) {
112118 EmbeddableClass foreignCompositeKeyEmbedded = new EmbeddableClass (); //Create a new embeddable for this foreign composite key
113119 String embeddableName = setOfForeignKeyColumns .stream ().map (Column ::getFieldName ).collect (Collectors .joining ());
114120 foreignCompositeKeyEmbedded .setClassName (WordUtils .capitalize (embeddableName ));
@@ -129,18 +135,18 @@ private static void handleSharedCompositePrimaryKey(Table table, Column parentTa
129135 parentTableField .getAnnotations ().add (MapsIdAnnotation .builder ().fieldName (foreignCompositeField .getFieldName ()).build ().toString ());
130136 }
131137
132- private static Set <Column > setOfForeignKeys ( Table table , ForeignKeyConstraint foreignKeyConstraint ) {
138+ private static List <Column > listOfForeignKeys ( final Table table , final ForeignKeyConstraint foreignKeyConstraint ) {
133139 Stream <Column > allTableForeignKeyColumns = table .getColumns ().stream ();
134140 Stream <Column > allEmbeddedForeignKeyColumns = table .getEmbeddableClasses ().stream ().flatMap (embeddableClass -> embeddableClass .getColumns ().stream ());
135- return Stream .concat (allTableForeignKeyColumns , allEmbeddedForeignKeyColumns ).filter (column -> foreignKeyConstraint .getColumns ().stream ().anyMatch (s -> s .equals (column .getColumnName ()))).collect ( Collectors . toSet () );
141+ return Stream .concat (allTableForeignKeyColumns , allEmbeddedForeignKeyColumns ).filter (column -> foreignKeyConstraint .getColumns ().stream ().anyMatch (s -> s .equals (column .getColumnName ()))).toList ( );
136142 }
137143
138- private static Set <Column > getAllPrimaryKeys (Table table , EmbeddableClass embeddableId ) {
139- //Get set of primary Keys
144+ private static List <Column > getAllPrimaryKeys (final Table table , final EmbeddableClass embeddableId ) {
145+ //Get list of primary Keys
140146 if (embeddableId != null ) {
141- return embeddableId .getColumns ().stream ().filter (Column ::isPrimaryKey ).collect ( Collectors . toSet () );
147+ return embeddableId .getColumns ().stream ().filter (Column ::isPrimaryKey ).toList ( );
142148 } else {
143- return table .getColumns ().stream ().filter (Column ::isPrimaryKey ).collect ( Collectors . toSet () );
149+ return table .getColumns ().stream ().filter (Column ::isPrimaryKey ).toList ( );
144150 }
145151 }
146152
0 commit comments