From 902512613ec22f3384d33cab9fa3b77bbfac999f Mon Sep 17 00:00:00 2001 From: janghs Date: Tue, 9 Apr 2024 10:21:42 +0900 Subject: [PATCH 1/2] Improved time complexity to O(N) in the second method. --- .../mapping/JpaMetamodelMappingContext.java | 27 +++++++++---------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/spring-data-jpa/src/main/java/org/springframework/data/jpa/mapping/JpaMetamodelMappingContext.java b/spring-data-jpa/src/main/java/org/springframework/data/jpa/mapping/JpaMetamodelMappingContext.java index 56fb375d55..42be046a00 100644 --- a/spring-data-jpa/src/main/java/org/springframework/data/jpa/mapping/JpaMetamodelMappingContext.java +++ b/spring-data-jpa/src/main/java/org/springframework/data/jpa/mapping/JpaMetamodelMappingContext.java @@ -171,25 +171,24 @@ public boolean isMetamodelManagedType(Class type) { */ @Nullable private Metamodel getMetamodelFor(Class type) { - - for (Metamodel model : metamodels) { - - try { + Metamodel currentModel = null; + try { + for (Metamodel model : metamodels) { + currentModel = model; model.managedType(type); return model; - } catch (IllegalArgumentException o_O) { - - // Fall back to inspect *all* managed types manually as Metamodel.managedType(…) only - // returns for entities, embeddables and managed superclasses. - - for (ManagedType managedType : model.getManagedTypes()) { - if (type.equals(managedType.getJavaType())) { - return model; - } + } + } catch (IllegalArgumentException o_O) { + + // Fall back to inspect *all* managed types manually as Metamodel.managedType(…) only + // returns for entities, embeddables and managed superclasses. + + for (ManagedType managedType : currentModel.getManagedTypes()) { + if (type.equals(managedType.getJavaType())) { + return currentModel; } } } - return null; } } From 26886675c13aa0760421fb9325ba82d094614030 Mon Sep 17 00:00:00 2001 From: janghs Date: Wed, 17 Apr 2024 15:33:38 +0900 Subject: [PATCH 2/2] Added null check for currentModel. --- .../data/jpa/mapping/JpaMetamodelMappingContext.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/spring-data-jpa/src/main/java/org/springframework/data/jpa/mapping/JpaMetamodelMappingContext.java b/spring-data-jpa/src/main/java/org/springframework/data/jpa/mapping/JpaMetamodelMappingContext.java index 42be046a00..e025340b9c 100644 --- a/spring-data-jpa/src/main/java/org/springframework/data/jpa/mapping/JpaMetamodelMappingContext.java +++ b/spring-data-jpa/src/main/java/org/springframework/data/jpa/mapping/JpaMetamodelMappingContext.java @@ -183,9 +183,11 @@ private Metamodel getMetamodelFor(Class type) { // Fall back to inspect *all* managed types manually as Metamodel.managedType(…) only // returns for entities, embeddables and managed superclasses. - for (ManagedType managedType : currentModel.getManagedTypes()) { - if (type.equals(managedType.getJavaType())) { - return currentModel; + if (currentModel != null) { + for (ManagedType managedType : currentModel.getManagedTypes()) { + if (type.equals(managedType.getJavaType())) { + return currentModel; + } } } }