Some thoughts:
- Batch is fine, but deep insert might not be. See Offline OData Version Support and Limitations - Application Development in SAP Mobile Platform - SAP Library for more details.
- Keeping the keys blank is the essential part of this (if the key is going to be generated on the backend at sync time). To perform any updates to the record you should use the record locator url and etag to reference the item to update instead. (like your other example "/Workorders(lodata_sys_eid = X'047AD786A01011E4800095AE655F2D3900000000')" . If you need to display a temporary key field in the offline app until sync happens, I would recommend creating a secondary field to store the temporary display name so you can the leave the key field blank.