This is an automated email from the ASF dual-hosted git repository. ntimofeev pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/cayenne.git
commit 177bb615488678b0af9faf86fd2dbe2107a5889b Author: Nikita Timofeev <stari...@gmail.com> AuthorDate: Wed Feb 15 15:17:12 2023 +0400 CAY-2794 Fix Incorrect JavaType for Vertical-Inheritance Attributes --- .../translator/select/DescriptorColumnExtractor.java | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/cayenne/src/main/java/org/apache/cayenne/access/translator/select/DescriptorColumnExtractor.java b/cayenne/src/main/java/org/apache/cayenne/access/translator/select/DescriptorColumnExtractor.java index 0ecd53fe4..1cb72ff1a 100644 --- a/cayenne/src/main/java/org/apache/cayenne/access/translator/select/DescriptorColumnExtractor.java +++ b/cayenne/src/main/java/org/apache/cayenne/access/translator/select/DescriptorColumnExtractor.java @@ -118,15 +118,22 @@ class DescriptorColumnExtractor extends BaseColumnExtractor implements PropertyV int count = result.getDbAttributes().size(); for(int i=0; i<count; i++) { ResultNodeDescriptor resultNodeDescriptor = processTranslationResult(result, i); + DbAttribute dbAttribute = result.getDbAttributes().get(i); if(resultNodeDescriptor != null) { - resultNodeDescriptor.setJavaType(oa.getType()); - if (result.getDbAttributes().size() >= 2) { - DbAttribute dbAttribute = result.getDbAttributes().get(i); + // 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 { - addEntityResultField(result.getDbAttributes().get(i)); + // simple attribute + addEntityResultField(dbAttribute); } } }