Spec-Zone.ru › MySQL Connectors 1.0

10.2 Валидация схемы

При работе с MySQL Server 8.0.19 и более поздними версиями: Валидация схемы может быть настроена для Collection, чтобы документы в Collection проверялись по схеме перед их вставкой или обновлением. Это делается путём указания JSON-схемы во время Collection создания или изменения; валидация схемы выполняется сервером при создании или обновлении документа, и возвращается ошибка, если документ не соответствует заданной схеме. Дополнительную информацию о валидации JSON-схем в MySQL см. в . Этот раздел описывает, как настроить валидацию схемы для Collection с Connector/J.

Для настройки валидации схемы при создании Collection, передайте методу createCollection() объект CreateCollectionOptions, содержащий следующие поля:

  • reuse: логическое значение, устанавливаемое методом setReuseExisting. Если оно равно true, когда Collection для создания уже существует в Schema, содержащем его, Connector/J возвращает успех (без попытки применить JSON-схему к существующему Collection); в этом же случае Connector/J возвращает ошибку, если параметр установлен в false. Если reuse не задан, он принимается равным false.

  • validation: объект Validation, устанавливаемый методом setValidation(). Объект Validation, в свою очередь, содержит следующие поля:

    • level: перечисление класса ValidationLevel, устанавливаемое методом setLevel(); может принимать одно из следующих двух значений:

      • STRICT: Строгая валидация. Попытка вставить или изменить документ, нарушающий схему валидации, приводит к ошибке сервера.

      • OFF: Отсутствие валидации. Валидация схемы отключена.

      Если level не задан, он принимается как OFF для MySQL Server 8.0.19 и STRICT для 8.0.20 и более поздних версий.

    • schema: Строка, представляющая JSON-схему, используемую для валидации Document в Collection; устанавливается методом setSchema().

      Если schema не предоставлен, но level установлен в STRICT, Collection валидируется по схеме по умолчанию {"type" : "object"}.

Вот пример настройки валидации схемы при создании Collection:

Collection coll = this.schema.createCollection(collName,
    new CreateCollectionOptions()
        .setReuseExisting(false)
        .setValidation(new Validation()
           .setLevel(ValidationLevel.STRICT)
           .setSchema(
               "{\"id\": \"http://json-schema.org/geo\","
               + "\"$schema\": \"http://json-schema.org/draft-06/schema#\","
               + "       \"description\": \"A geographical coordinate\","
               + "       \"type\": \"object\","
               + "       \"properties\": {"
               + "          \"latitude\": {"
               + "             \"type\": \"number\""
               + "          },"
               + "          \"longitude\": {"
               + "             \"type\": \"number\""
               + "          }"
               + "       },"
               + "       \"required\": [\"latitude\", \"longitude\"]"
               + "  }"
)));

Установленные поля доступны соответствующими методами-геттерами.

Для изменения настройки валидации схемы для Collection используйте метод modifyCollection() и передайте ему объект ModifyCollectionOptions, содержащий те же поля, что и объект CreateCollectionOptions, за исключением поля reuse, которого нет в объекте ModifyCollectionOptions. Для объекта Validation объекта ModifyCollectionOptions пользователи могут установить либо его level или schema, или оба. Вот пример использования modifyCollection() для изменения настройки валидации схемы:

schema.modifyCollection(collName,
    new ModifyCollectionOptions()
        .setValidation(new Validation()
           .setLevel(ValidationLevel.OFF)
           .setSchema(
               "{\"id\": \"http://json-schema.org/geo\","
               + "\"$schema\": \"http://json-schema.org/draft-06/schema#\","
               + "       \"description\": \"NEW geographical coordinate\","
               + "       \"type\": \"object\","
               + "       \"properties\": {"
               + "          \"latitude\": {"
               + "             \"type\": \"number\""
               + "          },"
               + "          \"longitude\": {"
               + "             \"type\": \"number\""
               + "          }"
               + "       },"
               + "       \"required\": [\"latitude\", \"longitude\"]"
               + "  }"
)));

Если Коллекция содержит документы, которые не соответствуют новой JSON-схеме, предоставленной через ModifyCollectionOptions, сервер отклонит изменение схемы с ошибкой ERROR 5180 (HY000) Document is not valid according to the schema assigned to collection.

Примечание

createCollection() и modifyCollection() перегружены: их можно вызывать без передачи им CreateCollectionOptions или ModifyCollectionOptions соответственно, в этом случае валидация схемы не будет применена к Collection.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/connector-j-en/connector-j-schema-validation.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API