[
https://issues.apache.org/jira/browse/CAY-2838?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Jadon Hansell updated CAY-2838:
-------------------------------
Attachment: concrete-to-abstract-error.patch
> Vertical Inheritance: Problem setting db attribute to null via flattened path
> -----------------------------------------------------------------------------
>
> Key: CAY-2838
> URL: https://issues.apache.org/jira/browse/CAY-2838
> Project: Cayenne
> Issue Type: Bug
> Components: Core Library
> Affects Versions: 4.2
> Environment: Cayenne 4.2, Java 17, MacOS 14
> Reporter: Jadon Hansell
> Assignee: Nikita Timofeev
> Priority: Major
> Fix For: 4.2.1, 5.0-M1
>
> Attachments: NullifyFlattenedTests.patch,
> concrete-to-abstract-error.patch
>
> Time Spent: 20m
> Remaining Estimate: 0h
>
> While using vertical inheritance, I ran into a bug with a non-required
> attribute on a child {{{}DbEntity{}}}. The issue occurs when an attribute,
> accessed via a flattened path like '{{{}child.attr{}}}' on the child's
> {{{}ObjEntity{}}}, is initially set to a value and then later changed to
> null. This causes Cayenne to attempt to set the primary key of the {{child}}
> db entity to null as well.
> I've attached a patch that contains failing tests demonstrating this issue on
> both an ObjEntity's attribute and a belongs-to relationship.
> A temporary workaround I've used is to relocate these columns to the parent
> DbEntity so the path isn't flattened.
>
> The root of the problem appears to start in the
> {{{}ValuesCreationHandler{}}}. During the operation, it runs
> {{processFlattenedPath}} to identify the target row's ID, with
> {{{}add=false{}}}. This then iterates through the db path components and
> invokes {{processRelationship}} for each db relationship, again with
> {{{}add=false{}}}.
> While processing the first path component, {{processRelationship}} creates an
> {{UPDATE}} row operation, attempting to update the child's uuid to its
> current value (case 2 in the comments). Normally, this would not cause an
> error. But, because the '{{{}add'{}}} parameter is set to false, the
> {{ValuePropagationVisitor}} replaces the current ID with null.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)