This is an automated email from the ASF dual-hosted git repository.

mridulpathak pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/ofbiz-framework.git

commit c7853869aa35989e96fd6708117e5548c66dcc6c
Author: Mridul Pathak <[email protected]>
AuthorDate: Thu Jul 23 20:30:51 2026 +0530

    Fixed: Never let entity import move a SequenceValueItem counter backward 
(OFBIZ-5259)
    
    EntitySaxReader now prevents re-import of stale SequenceValueItem rows from
    regressing sequence counters. When an import would move a 
SequenceValueItem's
    seqId backward (detected by comparing incoming seqId to current database
    value), the import is skipped and a warning is logged.
    
    Behavior change applies only to the SequenceValueItem entity -- all other
    entities are unaffected. DELETE actions are excluded from the guard, and so
    are checkDataOnly (verify) runs, which still need to surface the would-be
    mismatch instead of silently skipping over it.
---
 .../org/apache/ofbiz/entity/util/EntitySaxReader.java | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git 
a/framework/entity/src/main/java/org/apache/ofbiz/entity/util/EntitySaxReader.java
 
b/framework/entity/src/main/java/org/apache/ofbiz/entity/util/EntitySaxReader.java
index 740c91cc87..ee8b08fdc7 100644
--- 
a/framework/entity/src/main/java/org/apache/ofbiz/entity/util/EntitySaxReader.java
+++ 
b/framework/entity/src/main/java/org/apache/ofbiz/entity/util/EntitySaxReader.java
@@ -225,6 +225,19 @@ public class EntitySaxReader extends DefaultHandler {
         this.currentAction = action;
     }
 
+    private boolean isSequenceValueItemRegression(GenericValue value) throws 
GenericEntityException {
+        if (!"SequenceValueItem".equals(value.getEntityName())) {
+            return false;
+        }
+        GenericValue existing = delegator.findOne("SequenceValueItem", false, 
"seqName", value.get("seqName"));
+        if (existing == null) {
+            return false;
+        }
+        Long incomingSeqId = value.getLong("seqId");
+        Long existingSeqId = existing.getLong("seqId");
+        return incomingSeqId != null && existingSeqId != null && incomingSeqId 
< existingSeqId;
+    }
+
     /**
      * Parse long.
      * @param content the content
@@ -485,6 +498,12 @@ public class EntitySaxReader extends DefaultHandler {
                             skip = true;
                         }
                     }
+                    if (!skip && !this.checkDataOnly && Action.DELETE != 
currentAction && isSequenceValueItemRegression(currentValue)) {
+                        skip = true;
+                        Debug.logWarning("Skipping import of " + 
currentValue.getEntityName() + " [" + currentValue.get("seqName")
+                                + "]: imported seqId=" + 
currentValue.getLong("seqId")
+                                + " would move the sequence counter backward, 
keeping the current higher value", MODULE);
+                    }
                     if (!skip) {
                         if (this.useTryInsertMethod && !this.checkDataOnly) {
                             if (Action.DELETE == currentAction) {

Reply via email to