An API that connects multiple Microsoft services, enabling data access and automation across platforms
This behavior is due to the backing store. Basically, after the object is sent the first time the backing store kicks in and tracks whether any values have been changed, since the value for OdataID remains the same, the value is not parsed for the second request and we get a JSON value of {}. The behavior is partially explained here. In order to avoid this, as we see above is to create two reference objects, an alternative is to add the following between the two post requests:
referenceCreate.getBackingStore().setReturnOnlyChangedValues(false);
referenceCreate.getBackingStore().setIsInitializationCompleted(false);