55import org .javawebstack .orm .ORM ;
66import org .javawebstack .orm .Repo ;
77
8+ import java .util .HashMap ;
9+ import java .util .Map ;
810import java .util .UUID ;
911
1012public class ModelBindParamTransformer extends DefaultRouteParamTransformer {
@@ -14,7 +16,22 @@ public class ModelBindParamTransformer extends DefaultRouteParamTransformer {
1416
1517 public ModelBindParamTransformer () {
1618 super ();
17- this .transformer = (exchange , repo , fieldName , source ) -> repo .accessible (accessorAttribName == null ? null : exchange .attrib (accessorAttribName )).where (fieldName , source ).first ();
19+ this .transformer = (exchange , repo , fieldName , source ) -> {
20+ Map <Class <? extends Model >, Map <Object , Object >> cache = exchange .attrib ("__modelbindcache__" );
21+ if (cache == null ) {
22+ cache = new HashMap <>();
23+ exchange .attrib ("__modelbindcache__" , cache );
24+ }
25+ if (!cache .containsKey (repo .getInfo ().getModelClass ()))
26+ cache .put (repo .getInfo ().getModelClass (), new HashMap <>());
27+ Map <Object , Object > modelCache = cache .get (repo .getInfo ().getModelClass ());
28+ Object model = modelCache .get (source );
29+ if (model == null ) {
30+ model = repo .accessible (accessorAttribName == null ? null : exchange .attrib (accessorAttribName )).where (fieldName , source ).first ();
31+ modelCache .put (source , model );
32+ }
33+ return model ;
34+ };
1835 for (Class <? extends Model > model : ORM .getModels ()) {
1936 ModelBind [] binds = model .getDeclaredAnnotationsByType (ModelBind .class );
2037 if (binds .length == 0 )
0 commit comments