public SqlCreateStatement(
      Map<String, Element> elementMap, Element parent, SqlUpgradeScripts upgradeScripts) {
    this.tableName = parent.getSimpleName().toString();

    columnDefinitions = new ArrayList<>();
    columnDefinitions.add(ColumnDefinition.createPrimaryIdDefinition());

    for (String key : elementMap.keySet()) {
      Element element = elementMap.get(key);
      ColumnDefinition columnDefinition = new ColumnDefinition(element);

      Column column = element.getAnnotation(Column.class);
      ForeignObject foreignObject = element.getAnnotation(ForeignObject.class);

      if (column != null && upgradeScripts != null) {
        int version = column.version();
        if (version > 1) {
          upgradeScripts.addAlterAddColumn(columnDefinition, tableName, version);
        }
      } else if (foreignObject != null && upgradeScripts != null) {
        int version = foreignObject.version();
        if (version > 1) {
          upgradeScripts.addAlterAddColumn(columnDefinition, tableName, version);
        }
      }
      columnDefinitions.add(columnDefinition);
    }
  }
 @SuppressWarnings({"unchecked"})
 public Content sync(final ForeignObject foreignObject) {
   return findById(foreignObject.getLocalClass(), foreignObject);
 }