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

ntimofeev pushed a commit to branch STABLE-4.2
in repository https://gitbox.apache.org/repos/asf/cayenne.git


The following commit(s) were added to refs/heads/STABLE-4.2 by this push:
     new e6f2f59f3 CAY-2801 Incorrect equals() implementation in 
IdGenerationMarker could cause data missing in the commit
e6f2f59f3 is described below

commit e6f2f59f369a9fdf5575d35b47f2ac30ee050da3
Author: Nikita Timofeev <stari...@gmail.com>
AuthorDate: Thu Mar 9 18:58:43 2023 +0300

    CAY-2801 Incorrect equals() implementation in IdGenerationMarker could 
cause data missing in the commit
---
 .../cayenne/access/flush/IdGenerationMarker.java      | 19 +------------------
 .../access/flush/PermanentObjectIdVisitor.java        |  2 +-
 .../cayenne/access/flush/EffectiveOpIdTest.java       |  5 +++--
 3 files changed, 5 insertions(+), 21 deletions(-)

diff --git 
a/cayenne-server/src/main/java/org/apache/cayenne/access/flush/IdGenerationMarker.java
 
b/cayenne-server/src/main/java/org/apache/cayenne/access/flush/IdGenerationMarker.java
index 2a10744c2..1cbd056d3 100644
--- 
a/cayenne-server/src/main/java/org/apache/cayenne/access/flush/IdGenerationMarker.java
+++ 
b/cayenne-server/src/main/java/org/apache/cayenne/access/flush/IdGenerationMarker.java
@@ -21,7 +21,6 @@ package org.apache.cayenne.access.flush;
 
 import java.io.Serializable;
 
-import org.apache.cayenne.ObjectId;
 import org.apache.cayenne.access.types.InternalUnsupportedTypeFactory;
 
 /**
@@ -32,23 +31,7 @@ import 
org.apache.cayenne.access.types.InternalUnsupportedTypeFactory;
 class IdGenerationMarker implements Serializable, 
InternalUnsupportedTypeFactory.Marker {
     private static final long serialVersionUID = -5339942931435878094L;
 
-    private final int id;
-
-    IdGenerationMarker(ObjectId id) {
-        this.id = id.hashCode();
-    }
-
-    @Override
-    public boolean equals(Object o) {
-        if (this == o) return true;
-        if (o == null || getClass() != o.getClass()) return false;
-        IdGenerationMarker that = (IdGenerationMarker) o;
-        return id == that.id;
-    }
-
-    @Override
-    public int hashCode() {
-        return id;
+    IdGenerationMarker() {
     }
 
     @Override
diff --git 
a/cayenne-server/src/main/java/org/apache/cayenne/access/flush/PermanentObjectIdVisitor.java
 
b/cayenne-server/src/main/java/org/apache/cayenne/access/flush/PermanentObjectIdVisitor.java
index c0884ba4e..5a994dbdd 100644
--- 
a/cayenne-server/src/main/java/org/apache/cayenne/access/flush/PermanentObjectIdVisitor.java
+++ 
b/cayenne-server/src/main/java/org/apache/cayenne/access/flush/PermanentObjectIdVisitor.java
@@ -129,7 +129,7 @@ class PermanentObjectIdVisitor implements 
DbRowOpVisitor<Void> {
             // skip db-generated
             if (supportsGeneratedKeys && dbAttr.isGenerated()) {
                 // mark that this attribute should be generated at insert time
-                idMap.put(dbAttrName, new IdGenerationMarker(id));
+                idMap.put(dbAttrName, new IdGenerationMarker());
                 continue;
             }
 
diff --git 
a/cayenne-server/src/test/java/org/apache/cayenne/access/flush/EffectiveOpIdTest.java
 
b/cayenne-server/src/test/java/org/apache/cayenne/access/flush/EffectiveOpIdTest.java
index 52ce75317..e59f37299 100644
--- 
a/cayenne-server/src/test/java/org/apache/cayenne/access/flush/EffectiveOpIdTest.java
+++ 
b/cayenne-server/src/test/java/org/apache/cayenne/access/flush/EffectiveOpIdTest.java
@@ -34,12 +34,13 @@ public class EffectiveOpIdTest {
     @Test
     public void testEqualsTempGeneratedId() {
         ObjectId id1 = ObjectId.of("test");
-        id1.getReplacementIdMap().put("pk", new IdGenerationMarker(id1));
-        EffectiveOpId effectiveOpId1 = new EffectiveOpId("test", 
Collections.singletonMap("pk", new IdGenerationMarker(id1)));
+        id1.getReplacementIdMap().put("pk", new IdGenerationMarker());
+        EffectiveOpId effectiveOpId1 = new EffectiveOpId("test", 
Collections.singletonMap("pk", new IdGenerationMarker()));
 
         EffectiveOpId effectiveOpId2 = new EffectiveOpId("test", 
Collections.singletonMap("pk", ObjectIdValueSupplier.getFor(id1, "pk")));
 
         assertEquals(effectiveOpId1, effectiveOpId2);
+        assertNotEquals(id1.getReplacementIdMap().get("pk"), new 
IdGenerationMarker());
     }
 
 }
\ No newline at end of file

Reply via email to