/**
   * Return whether any process leading to object modification should also affect its parts. Used by
   * write, insert, update, and delete.
   */
  protected boolean shouldObjectModifyCascadeToParts(ObjectLevelModifyQuery query) {
    if (isForeignKeyRelationship()) {
      return super.shouldObjectModifyCascadeToParts(query);
    } else {
      if (this.isReadOnly()) {
        return false;
      }

      if (this.isPrivateOwned()) {
        return true;
      }

      return query.shouldCascadeAllParts();
    }
  }