Resolve values eagerly in EffectiveOpId
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/flush/EffectiveOpId.java b/cayenne-server/src/main/java/org/apache/cayenne/access/flush/EffectiveOpId.java
index 8a94793..f61b35e 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/flush/EffectiveOpId.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/flush/EffectiveOpId.java
@@ -19,7 +19,9 @@
package org.apache.cayenne.access.flush;
+import java.util.HashMap;
import java.util.Map;
+import java.util.function.Supplier;
import org.apache.cayenne.ObjectId;
@@ -38,7 +40,12 @@
public EffectiveOpId(ObjectId id) {
this.id = id;
this.entityName = id.getEntityName();
- this.snapshot = id.getIdSnapshot();
+ this.snapshot = new HashMap<>(id.getIdSnapshot());
+ this.snapshot.entrySet().forEach(entry -> {
+ if(entry.getValue() instanceof Supplier) {
+ entry.setValue(((Supplier) entry.getValue()).get());
+ }
+ });
}
@Override