对于 Connector/J 8.0.21 及更高版本,当使用 MySQL Server 8.0.19 及更高版本时:可以为 a 配置架构验证Collection
,以便在Collection
插入或更新文档之前根据架构验证其中的文档。这是通过创建或修改期间指定JSON Schema来完成的;Collection
模式验证随后由服务器在文档创建或更新时执行,如果文档未针对分配的模式进行验证,则会返回错误。有关 MySQL 中 JSON 模式验证的更多信息,请参阅
JSON 模式验证函数。本节介绍如何为
Collection
带连接器/J。
要在创建 a 期间配置模式验证,请将
对象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\"]"
+ " }"
)));
set 字段可以通过相应的 getter 方法访问。
要修改 a 的架构验证配置
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\"]"
+ " }"
)));
如果 Collection 包含的文档未根据所提供的新 JSON 架构进行验证
ModifyCollectionOptions
,则服务器将拒绝架构修改并显示错误ERROR
5180 (HY000) Document is not valid according to the schema
assigned to collection
。
createCollection()
和
modifyCollection()
被重载:它们可以在不分别传递给它们
CreateCollectionOptions
或 的
情况下被调用ModifyCollectionOptions
,在这种情况下,架构验证将不会应用于
Collection
.