/**
  * Вставляет в базу заполненный клиентом объект в начальном статусе.
  *
  * @param instance - заполненный экземпляр объекта
  * @return - идентификатор созданного объекта.
  */
 public Long createInstance(Instance instance) {
   ArgumentsChecker.notNull(new Argument("instance", instance));
   try (Database database = new Database(data)) {
     ru.skycelot.plicanterra.metamodel.transfer.Template template =
         findTemplate(instance.template);
     checkStatusForSameness(instance.status, template.status, template.code);
     instance.id = database.getNextInstanceSequenceValue();
     database.saveTemplateCodeOfInstance(instance.id, instance.template.code);
     instance.version = 1L;
     InsertQuery query = new InsertQuery(instance.template.code);
     query.addInlineColumn("ID", instance.id);
     query.addInlineColumn("STATUS_ID", template.status.id);
     query.addInlineColumn("VERSION", instance.version);
     processAttributes(instance.attributes, template, query);
     List<InsertQuery> joinLinks = new LinkedList<>();
     List<UpdateQuery> referencedLinks = new LinkedList<>();
     processLinks(instance.links, template, query, joinLinks, referencedLinks, instance.id);
     database.execute(query);
     for (InsertQuery linkQuery : joinLinks) {
       database.execute(linkQuery);
     }
     for (UpdateQuery linkQuery : referencedLinks) {
       database.execute(linkQuery);
     }
     return instance.id;
   } catch (IOException e) {
     throw new RuntimeException(e);
   }
 }
 /**
  * Создает в базе новый экземпляр объекта по заданному шаблону в первоначальном статусе и
  * возвращает его.
  *
  * @param templateId - идентификатор шаблона.
  * @return - экземпляр объекта.
  */
 public Instance createInstance(Long templateId) {
   ru.skycelot.plicanterra.metamodel.transfer.Template template =
       metamodel.getTemplate(templateId);
   Instance instance = InstanceInitializer.createInstanceFromTemplate(template);
   try (Database database = new Database(data)) {
     instance.id = database.getNextInstanceSequenceValue();
     database.saveTemplateCodeOfInstance(instance.id, instance.template.code);
     instance.version = 1L;
     InsertQuery query = new InsertQuery(instance.template.code);
     query.addInlineColumn("ID", instance.id);
     query.addInlineColumn("STATUS_ID", instance.status.id);
     query.addInlineColumn("VERSION", instance.version);
     database.execute(query);
     return instance;
   } catch (IOException e) {
     throw new RuntimeException(e);
   }
 }