From 085b4116f158b107d989ceaa7dac2aed2a370532 Mon Sep 17 00:00:00 2001 From: Vladimir Konkov Date: Wed, 22 Jul 2020 14:29:42 +0300 Subject: [PATCH] Make stable cache key for update calls cache to prevent cache misses and unlimited grow. Signed-off-by: Vladimir Konkov --- .../internal/queries/ExpressionQueryMechanism.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/internal/queries/ExpressionQueryMechanism.java b/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/internal/queries/ExpressionQueryMechanism.java index ab8b66028a7..a7c5e80f552 100644 --- a/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/internal/queries/ExpressionQueryMechanism.java +++ b/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/internal/queries/ExpressionQueryMechanism.java @@ -1774,7 +1774,8 @@ public void prepareUpdateObject() { boolean useCache = (row == null || !(getQuery().shouldValidateUpdateCallCacheUse() && row.hasNullValueInFields())); // PERF: Check the descriptor update SQL call cache for a matching update with the same fields. - Vector updateCalls = getDescriptor().getQueryManager().getCachedUpdateCalls(getModifyRow().getFields()); + final Vector updateCallsKey = org.eclipse.persistence.internal.helper.NonSynchronizedVector.newInstance(getModifyRow().getFields()); + Vector updateCalls = getDescriptor().getQueryManager().getCachedUpdateCalls(updateCallsKey); // If the calls were cached then don't need to prepare. if (updateCalls != null && useCache == true) { int updateCallsSize = updateCalls.size(); @@ -1819,7 +1820,7 @@ public void prepareUpdateObject() { updateCalls.add(getCall()); } } - getDescriptor().getQueryManager().putCachedUpdateCalls(getModifyRow().getFields(), updateCalls); + getDescriptor().getQueryManager().putCachedUpdateCalls(updateCallsKey, updateCalls); } }