code: private void addAndRemoveAttributesInBackend(EntityType entityType) {
      EntityType existingEntityType = delegate().findOneById(entityType.getId());
      if (existingEntityType == null) {
        throw new UnknownEntityTypeException(entityType.getId());
      }
      Map<String, Attribute> attrsMap = toAttributesMap(entityType);
      Map<String, Attribute> existingAttrsMap = toAttributesMap(existingEntityType);
  
      dataService
          .getMeta()
          .getConcreteChildren(entityType)
          .forEach(
              concreteEntityType -> {
                RepositoryCollection backend = dataService.getMeta().getBackend(concreteEntityType);
                EntityType concreteExistingEntityType =
                    delegate().findOneById(concreteEntityType.getId());
  
                addNewAttributesInBackend(
                    attrsMap, existingAttrsMap, backend, concreteExistingEntityType);
                deleteRemovedAttributesInBackend(
                    attrsMap, existingAttrsMap, backend, concreteExistingEntityType);
              });
    }
docs: Add and remove entity attributes in the backend for an {@link EntityType}. If the {@link
  EntityType} is abstract, will update all concrete extending {@link EntityType}s. Attribute
  updates are handled by the {@link AttributeRepositoryDecorator}.
  
  @param entityType {@link EntityType} containing the desired situation.