code: public static Response getBatchUpdateResponse(App app, Map<String, ParaObject> oldObjects,
  			List<Map<String, Object>> newProperties) {
  		try (final Metrics.Context context = Metrics.time(app == null ? null : app.getAppid(),
  				RestUtils.class, "batch", "update")) {
  			if (app != null && oldObjects != null && newProperties != null) {
  				LinkedList<ParaObject> updatedObjects = new LinkedList<>();
  				boolean hasPositiveVersions = false;
  				for (Map<String, Object> newProps : newProperties) {
  					if (newProps != null && newProps.containsKey(Config._ID)) {
  						ParaObject oldObject = oldObjects.get((String) newProps.get(Config._ID));
  						// updating apps in batch is not allowed
  						if (oldObject != null && checkImplicitAppPermissions(app, oldObject)) {
  							ParaObject updatedObject = ParaObjectUtils.setAnnotatedFields(oldObject, newProps, Locked.class);
  							if (isValidObject(app, updatedObject) && checkIfUserCanModifyObject(app, updatedObject)) {
  								updatedObject.setAppid(app.getAppIdentifier());
  								updatedObjects.add(updatedObject);
  								if (updatedObject.getVersion() != null && updatedObject.getVersion() > 0) {
  									hasPositiveVersions = true;
  								}
  							}
  						}
  					}
  				}
  				Para.getDAO().updateAll(app.getAppIdentifier(), updatedObjects);
  				// check if any or all updates failed due to optimistic locking
  				return handleFailedUpdates(hasPositiveVersions, updatedObjects);
  			} else {
  				return getStatusResponse(Response.Status.BAD_REQUEST);
  			}
  		}
  	}
docs: Batch update response as JSON.
  @param app the current App object
  @param oldObjects a list of old objects read from DB
  @param newProperties a list of new object properties to be updated
  @return a status code 200 or 400