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

asf-gitbox-commits pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cayenne.git

commit 4835475c63a6381d2670f867345e4edafa80dbd1
Author: Andrus Adamchik <[email protected]>
AuthorDate: Fri May 15 19:05:00 2026 -0400

    MergerTokenFactoryProvider does not resolve adapter subclasses CAY-2944
---
 RELEASE-NOTES.txt                                              |  1 +
 .../dbsync/merge/factory/MergerTokenFactoryProvider.java       | 10 +++++++++-
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index ca8581dba..17c988b72 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -71,6 +71,7 @@ CAY-2921 Modeler: consistent duplicate name handling
 CAY-2926 Modeler: renaming an ObjEntity adds it to cgen excludeEntities
 CAY-2931 Modeler: default encoding detected as UTF8, should be UTF-8
 CAY-2934 Modeler: dropdown data trunction
+CAY-2944 MergerTokenFactoryProvider does not resolve adapter subclasses
 
 ----------------------------------
 Release: 5.0-M1
diff --git 
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/MergerTokenFactoryProvider.java
 
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/MergerTokenFactoryProvider.java
index efc68f49a..00005fdad 100644
--- 
a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/MergerTokenFactoryProvider.java
+++ 
b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/factory/MergerTokenFactoryProvider.java
@@ -43,6 +43,14 @@ public class MergerTokenFactoryProvider {
     }
 
     public MergerTokenFactory get(DbAdapter adapter) throws DIRuntimeException 
{
-        return 
perAdapterValues.getOrDefault(adapter.unwrap().getClass().getName(), 
defaultValue);
+        // walk up the class hierarchy so subclasses (e.g. 
HSQLDBNoSchemaAdapter)
+        // resolve to the factory mapped against their parent (HSQLDBAdapter)
+        for (Class<?> c = adapter.unwrap().getClass(); 
DbAdapter.class.isAssignableFrom(c); c = c.getSuperclass()) {
+            MergerTokenFactory factory = perAdapterValues.get(c.getName());
+            if (factory != null) {
+                return factory;
+            }
+        }
+        return defaultValue;
     }
 }

Reply via email to