[ https://issues.apache.org/jira/browse/OLINGO-1420?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
SlavomÃr Bavala closed OLINGO-1420. ----------------------------------- > Unable to perform deep insert using Olingo V2 when navigation properties > relationship is 1:N > -------------------------------------------------------------------------------------------- > > Key: OLINGO-1420 > URL: https://issues.apache.org/jira/browse/OLINGO-1420 > Project: Olingo > Issue Type: Bug > Components: odata2-core > Affects Versions: V2 2.0.11 > Reporter: SlavomÃr Bavala > Priority: Major > > Use case: perform deep insert using Olingo V2 > As described in https://issues.apache.org/jira/browse/OLINGO-1401 Olingo will > not serialize navigation properties and their contents into the request if > _contentOnly_ flag is set to *true*. > We set it to *false* but that adds metadata to the request payload as a > result. In case of an update, where key properties are not present in the > payload but in the URL, the metadata generation will fail (we wrote a hack to > overcome this). > The biggest problem we found is the serialization of > +_childNavigationProperty_+ properties described by 1:N relationship, see the > following example: > {code:java} > { > "rootLevelProperty": "", > "rootLevelNavigationProperty": [ > { > "child": "1", > "childNavigationProperty": [ > { > "grandChild": "X" > } > ] > }, > { > "child": "2", > "childNavigationProperty": [ > { > "grandChild": "Y" > } > ] > } > } > }{code} > To serialize the navigation properties we need to specify the > _customExpanedLinks_ for every nested level. We also need to specify > _callbacks_ for every navigation property (this means also defining nested > callbacks for nested navigation properties). > When navigation property is described by 1:N relationship, we need to > register a _OnWriteFeedContent_ callback. This callback however doesn't allow > us to specify nested callbacks for every item in the list, we can only > register a single callback for the +*entire feed*+. This means we are not > able to serialize _grandChild_ property correctly and we have to choose > either "X" or "Y" as a value for both items. > Our code looks like this: > {code:java} > writeEntry(APPLICATION_JSON, rootEntitySet, dataMap, > serviceRoot(new URI(entitySetName)) > .omitJsonWrapper(true) > .contentOnly(update) //true for updates > .expandSelectTree(expandSelectTreeNodeBuilder.build()) //tree > of customExpanedLinks so navigation properties are serialized > .callbacks(createCallbacks(navigationPropertyMap, > rootEntityType)) // tree of callbacks to provide data for all > customExpanedLinks defined above > .build() > {code} > How can we perform such deep insert using Olingo? > Are we using the library as intended? > Does Olingo V2 even supports deep inserts? -- This message was sent by Atlassian Jira (v8.3.4#803005)