-
Proposal:
Hide
prohibit specifying the nullable attribute for collection-valued navigation properties
Show
prohibit specifying the nullable attribute for collection-valued navigation properties
-
Resolution:
Show
https://www.oasis-open.org/apps/org/workgroup/odata/download.php/47605/odata-core-v1.0-wd01-part3-csdl-2012-12-03-RH.doc
https://www.oasis-open.org/apps/org/workgroup/odata/download.php/47654/odata-core-v1.0-wd01-part3-csdl-2012-12-07-RH.doc
Accepted: https://www.oasis-open.org/apps/org/workgroup/odata/download.php/47722/latest/odata-meeting-18_on-20121213-minutes.html
ODATA-24 simplified relationships by moving association information into the navigation property. In doing so, cardinality was represented by the type of the navigation property being either a single entity or a collection of entities. For a single entity, optionality of the entity (i.e., 0 or 1) is represented by a nullable attribute (whose default is false).
For navigation properties that return collections of entities, nullable=true doesn't make sense; the collection always exists, it may just be empty. Thus, collection-valued navigation properties should either:
1) always specify nullable=false
2) explicitly prohibit specifying nullable=true, or
3) disallow the nullable attribute
Note that there is precedence for the set of valid attributes depending on the type (i.e., in specifying property facets).
{"report":{"apdex":1,"isInitial":true,"journeyId":"0f022618-9f53-4a6c-9781-63f8fe0f4730","key":"jira.project.issue.view-issue","navigationType":0,"readyForUser":977.3000001907349,"redirectCount":0,"resourceLoadedEnd":1357,"resourceLoadedStart":413.5,"resourceTiming":[{"duration":208.30000019073486,"initiatorType":"link","name":"https://issues.oasis-open.org/s/3edeca31ab9ba77980aae0809fbe7121-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/0a4716d29b2d5b1bdcdb168b4efc119e/_/download/contextbatch/css/_super/batch.css","startTime":413.5,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":413.5,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":621.8000001907349,"responseStart":0,"secureConnectionStart":0},{"duration":208.2999997138977,"initiatorType":"link","name":"https://issues.oasis-open.org/s/7d2823769c2e7b66e860863fe879b7f8-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/9aebb1c0aaa4c36289529757ec9dbb54/_/download/contextbatch/css/project.issue.navigator,jira.view.issue,jira.global,atl.general,-_super/batch.css?agile_global_admin_condition=true&jag=true&jira.create.linked.issue=true&richediton=true","startTime":413.80000019073486,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":413.80000019073486,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":622.0999999046326,"responseStart":0,"secureConnectionStart":0},{"duration":208.09999990463257,"initiatorType":"link","name":"https://issues.oasis-open.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/8.0.5/_/download/batch/com.atlassian.auiplugin:split_aui.pattern.label/com.atlassian.auiplugin:split_aui.pattern.label.css","startTime":414.09999990463257,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":414.09999990463257,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":622.1999998092651,"responseStart":0,"secureConnectionStart":0},{"duration":208.10000038146973,"initiatorType":"link","name":"https://issues.oasis-open.org/s/645acc233eb869f48a571293b8358a7d-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/1.0/_/download/batch/jira.webresources:global-static-adgs/jira.webresources:global-static-adgs.css","startTime":414.19999980926514,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":414.19999980926514,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":622.3000001907349,"responseStart":0,"secureConnectionStart":0},{"duration":208.09999990463257,"initiatorType":"link","name":"https://issues.oasis-open.org/s/a0dd6509771c1de0667aae5429c04cda-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/1.0/_/download/batch/jira.webresources:global-static/jira.webresources:global-static.css","startTime":414.30000019073486,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":414.30000019073486,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":622.4000000953674,"responseStart":0,"secureConnectionStart":0},{"duration":234.40000009536743,"initiatorType":"script","name":"https://issues.oasis-open.org/s/e5479157e7a0c08b005e6522f2f04104-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/0a4716d29b2d5b1bdcdb168b4efc119e/_/download/contextbatch/js/_super/batch.js?locale=en-US","startTime":414.5,"connectEnd":414.5,"connectStart":414.5,"domainLookupEnd":414.5,"domainLookupStart":414.5,"fetchStart":414.5,"redirectEnd":0,"redirectStart":0,"requestStart":414.5,"responseEnd":648.9000000953674,"responseStart":648.9000000953674,"secureConnectionStart":414.5},{"duration":277.30000019073486,"initiatorType":"script","name":"https://issues.oasis-open.org/s/83514d5d4e8543747b02042eafcdc99c-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/9aebb1c0aaa4c36289529757ec9dbb54/_/download/contextbatch/js/project.issue.navigator,jira.view.issue,jira.global,atl.general,-_super/batch.js?agile_global_admin_condition=true&jag=true&jira.create.linked.issue=true&locale=en-US&richediton=true","startTime":414.59999990463257,"connectEnd":414.59999990463257,"connectStart":414.59999990463257,"domainLookupEnd":414.59999990463257,"domainLookupStart":414.59999990463257,"fetchStart":414.59999990463257,"redirectEnd":0,"redirectStart":0,"requestStart":414.59999990463257,"responseEnd":691.9000000953674,"responseStart":691.9000000953674,"secureConnectionStart":414.59999990463257},{"duration":279.3999996185303,"initiatorType":"script","name":"https://issues.oasis-open.org/s/70bb2263e59e7e1f04fbd137c80b895b-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/aae1242f5fc81cc6a5bb8bc963ccda29/_/download/contextbatch/js/atl.global,-_super/batch.js?locale=en-US","startTime":414.80000019073486,"connectEnd":414.80000019073486,"connectStart":414.80000019073486,"domainLookupEnd":414.80000019073486,"domainLookupStart":414.80000019073486,"fetchStart":414.80000019073486,"redirectEnd":0,"redirectStart":0,"requestStart":414.80000019073486,"responseEnd":694.1999998092651,"responseStart":694.1999998092651,"secureConnectionStart":414.80000019073486},{"duration":279.69999980926514,"initiatorType":"script","name":"https://issues.oasis-open.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/1.0/_/download/batch/jira.webresources:calendar-en/jira.webresources:calendar-en.js","startTime":415,"connectEnd":415,"connectStart":415,"domainLookupEnd":415,"domainLookupStart":415,"fetchStart":415,"redirectEnd":0,"redirectStart":0,"requestStart":415,"responseEnd":694.6999998092651,"responseStart":694.6999998092651,"secureConnectionStart":415},{"duration":280,"initiatorType":"script","name":"https://issues.oasis-open.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/1.0/_/download/batch/jira.webresources:calendar-localisation-moment/jira.webresources:calendar-localisation-moment.js","startTime":415.09999990463257,"connectEnd":415.09999990463257,"connectStart":415.09999990463257,"domainLookupEnd":415.09999990463257,"domainLookupStart":415.09999990463257,"fetchStart":415.09999990463257,"redirectEnd":0,"redirectStart":0,"requestStart":415.09999990463257,"responseEnd":695.0999999046326,"responseStart":695.0999999046326,"secureConnectionStart":415.09999990463257},{"duration":280.09999990463257,"initiatorType":"script","name":"https://issues.oasis-open.org/s/cda37faab827dbdf305de8efe8282062-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/8.0.5/_/download/batch/com.atlassian.auiplugin:split_aui.pattern.label/com.atlassian.auiplugin:split_aui.pattern.label.js?locale=en-US","startTime":415.40000009536743,"connectEnd":415.40000009536743,"connectStart":415.40000009536743,"domainLookupEnd":415.40000009536743,"domainLookupStart":415.40000009536743,"fetchStart":415.40000009536743,"redirectEnd":0,"redirectStart":0,"requestStart":415.40000009536743,"responseEnd":695.5,"responseStart":695.5,"secureConnectionStart":415.40000009536743},{"duration":376.5,"initiatorType":"link","name":"https://issues.oasis-open.org/s/07245784f53abc49bad9d9d4d36c577a-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/cadc4f20cc5c138dee060d42cf85f220/_/download/contextbatch/css/jira.global.look-and-feel,-_super/batch.css","startTime":415.59999990463257,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":415.59999990463257,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":792.0999999046326,"responseStart":0,"secureConnectionStart":0},{"duration":278.09999990463257,"initiatorType":"script","name":"https://issues.oasis-open.org/rest/api/1.0/shortcuts/803004/a29179d70fa8562374ee16707692af77/shortcuts.js?context=issuenavigation&context=issueaction","startTime":417.80000019073486,"connectEnd":417.80000019073486,"connectStart":417.80000019073486,"domainLookupEnd":417.80000019073486,"domainLookupStart":417.80000019073486,"fetchStart":417.80000019073486,"redirectEnd":0,"redirectStart":0,"requestStart":417.80000019073486,"responseEnd":695.9000000953674,"responseStart":695.9000000953674,"secureConnectionStart":417.80000019073486},{"duration":346.09999990463257,"initiatorType":"link","name":"https://issues.oasis-open.org/s/f77fd89aa211a76b20e9b0e63564383c-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/4a9288299d147101bf66484f4be48925/_/download/contextbatch/css/com.atlassian.jira.projects.sidebar.init,-_super,-jira.view.issue,-project.issue.navigator/batch.css?jira.create.linked.issue=true&richediton=true","startTime":446.09999990463257,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":446.09999990463257,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":792.1999998092651,"responseStart":0,"secureConnectionStart":0},{"duration":257.8999996185303,"initiatorType":"script","name":"https://issues.oasis-open.org/s/41525c48ddceeb9b11e54085268fc285-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/4a9288299d147101bf66484f4be48925/_/download/contextbatch/js/com.atlassian.jira.projects.sidebar.init,-_super,-jira.view.issue,-project.issue.navigator/batch.js?jira.create.linked.issue=true&locale=en-US&richediton=true","startTime":446.30000019073486,"connectEnd":446.30000019073486,"connectStart":446.30000019073486,"domainLookupEnd":446.30000019073486,"domainLookupStart":446.30000019073486,"fetchStart":446.30000019073486,"redirectEnd":0,"redirectStart":0,"requestStart":446.30000019073486,"responseEnd":704.1999998092651,"responseStart":704.1999998092651,"secureConnectionStart":446.30000019073486}],"threshold":1000,"fetchStart":0,"domainLookupStart":308,"domainLookupEnd":308,"connectStart":308,"connectEnd":357,"secureConnectionStart":332,"requestStart":357,"responseStart":406,"responseEnd":476,"domLoading":412,"domInteractive":1376,"domContentLoadedEventStart":1376,"domContentLoadedEventEnd":1423,"domComplete":2116,"loadEventStart":2116,"loadEventEnd":2119,"userAgent":"Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)","marks":[],"measures":[],"correlationId":"72ad0ccc3a0c5c","effectiveType":"4g","downlink":9.9,"rtt":0,"serverDuration":84,"dbReadsTimeInMs":11,"dbConnsTimeInMs":14,"applicationHash":"4d4040e0714d65b7fffa4801569d014c0b16eaa9","experiments":[]}}
Using false as default for Nullable is inconsistent with its default value for "normal" properties. I recommend keeping "true" as the default.
Added the restriction to non-colllection types.