You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by nt...@apache.org on 2023/02/15 11:21:24 UTC

[cayenne] branch STABLE-4.2 updated: CAY-2794 Fix Incorrect JavaType for Vertical-Inheritance Attributes

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 ff6239b46 CAY-2794 Fix Incorrect JavaType for Vertical-Inheritance Attributes
ff6239b46 is described below

commit ff6239b46004b4e9e69a0002dabda95d4495906e
Author: Nikita Timofeev <st...@gmail.com>
AuthorDate: Wed Feb 15 14:17:12 2023 +0300

    CAY-2794 Fix Incorrect JavaType for Vertical-Inheritance Attributes
---
 .../access/translator/select/DescriptorColumnExtractor.java   | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/select/DescriptorColumnExtractor.java b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/select/DescriptorColumnExtractor.java
index 494519c75..1cb72ff1a 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/select/DescriptorColumnExtractor.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/select/DescriptorColumnExtractor.java
@@ -120,12 +120,19 @@ class DescriptorColumnExtractor extends BaseColumnExtractor implements PropertyV
             ResultNodeDescriptor resultNodeDescriptor = processTranslationResult(result, i);
             DbAttribute dbAttribute = result.getDbAttributes().get(i);
             if(resultNodeDescriptor != null) {
-                resultNodeDescriptor.setJavaType(oa.getType());
-                if (result.getDbAttributes().size() > 1) {
+                // set exact Java type only for the result node directly related to the ObjAttribute we processing
+                // for the rest DbAttributes Java type would be calculated based on the DB type
+                // see also CAY-2794
+                if(dbAttribute == oa.getDbAttribute()) {
+                    resultNodeDescriptor.setJavaType(oa.getType());
+                }
+                if (count > 1) {
+                    // it was a flattened attribute, so need to keep full path info
                     String dataRowKey = result.getAttributePaths().get(i) + "." + dbAttribute.getName();
                     resultNodeDescriptor.setDataRowKey(dataRowKey);
                     addEntityResultField(dataRowKey);
                 } else {
+                    // simple attribute
                     addEntityResultField(dbAttribute);
                 }
             }