lallemand created CAY-2880:
------------------------------
Summary: Unable to Set Name for Child Nodes in PrefetchTreeNode
Key: CAY-2880
URL: https://issues.apache.org/jira/browse/CAY-2880
Project: Cayenne
Issue Type: Bug
Components: Core Library
Affects Versions: 4.2.1
Reporter: lallemand
Fix For: 4.2.2
*Description:*
It is currently impossible to use child nodes for {{PrefetchTreeNode}} because
the {{name}} variable cannot be set. This leads to an error when calling
{{{}addChild(){}}}, making the intended functionality unusable.
*Affected Code:*
{code:java}
PrefetchTreeNode prefetchTreeNode = new PrefetchTreeNode();
// Prefetch 1
PrefetchTreeNode childPrefetchTreeNode = new PrefetchTreeNode();
childPrefetchTreeNode.addPath("example.test");
childPrefetchTreeNode.setSemantics(PrefetchTreeNode.JOINT_PREFETCH_SEMANTICS);
prefetchTreeNode.addChild(childPrefetchTreeNode);
// Prefetch 2
childPrefetchTreeNode = new PrefetchTreeNode();
childPrefetchTreeNode.addPath("example.test2");
childPrefetchTreeNode.setSemantics(PrefetchTreeNode.DISJOINT_PREFETCH_SEMANTICS);
prefetchTreeNode.addChild(childPrefetchTreeNode);
query.prefetch(prefetchTreeNode);
ObjectContext context = BaseContext.getThreadObjectContext();
List<?> items = context.performQuery(query); {code}
*Cayenne* {{*addChild*}} *Function:*
{code:java}
public void addChild(PrefetchTreeNode child) {
if (Util.isEmptyString(child.getName())) {
throw new IllegalArgumentException("Child has no segmentPath: " +
child);
} else {
if (child.getParent() != this) {
child.getParent().removeChild(child.getName());
child.parent = this;
}
if (this.children == null) {
this.children = new ArrayList(4);
}
this.children.add(child);
}
} {code}
*Issue:*
The {{addChild}} function requires the child node to have a name. However:
* The {{PrefetchTreeNode}} constructor that accepts a {{name}} is protected.
* The {{name}} variable itself is protected and cannot be accessed externally.
* There is no public setter method for {{{}name{}}}.
As a result, it is impossible to set the name of a child node, making the
{{addChild()}} method non-functional for child nodes.
*Workaround:*
None available at this time.
*Suggested Fix:*
* Provide a public constructor that allows setting the {{{}name{}}}.
* Alternatively, add a public setter method for {{name}} to enable proper
initialization of child nodes.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)