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.