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; } }
