对于Connector/J 8.0.21及以后版本,当使用MySQL Server 8.0.19及以后版本时:模式验证可以配置为集合
,以便文档在集合
在插入或更新它们之前,根据模式进行验证。这是通过指定JSON模式在集合
创建或修改;然后,服务器在文档创建或更新时执行模式验证,如果文档没有针对所分配的模式进行验证,则返回一个错误。有关MySQL中JSON模式验证的更多信息,请参见JSON模式验证函数。控件的模式验证配置方法集合
与连接器/ J。
在创建模式时配置模式验证集合
,传递给createCollection ()
方法CreateCollectionOptions
对象,它有以下字段:
重用
的布尔值setReuseExisting
方法。如果它是真正的
,当集合
被创建的已经存在模式
也就是说,要包含它,Connector/J返回成功(没有任何尝试将JSON模式应用到现有的集合
);在同样的情况下,如果参数设置为,Connector/J返回一个错误假
。如果重用
不是定了,便是取了假
。验证
:一个验证
对象设置的setValidation ()
方法。一个验证
对象依次包含以下字段:水平
:类的枚举ValidationLevel
,由setLevel ()
方法;它可以是以下两个值之一:严格的
:严格验证。试图插入或修改违反验证模式的文档会引发服务器错误。从
:没有验证。模式验证是关闭的。
如果
水平
不是定了,就是取了从
MySQL Server 8.0.19和严格的
8.0.20及以后版本。模式
:表示AJSON模式用于验证文档
在集合
;设定的setSchema ()
方法。如果
模式
不提供,但水平
设置为STRICT时,集合
是否根据默认模式进行验证{“类型”:“对象”}
。
这是如何在创建集合
:
收集coll = this.schema。createCollection (collName,新的CreateCollectionOptions () .setReuseExisting (false) .setValidation(新验证().setLevel ValidationLevel.STRICT .setSchema(“{\ \“id”:\“http://json-schema.org/geo \"," + "\"$ 模式\”,\“http://json-schema.org/draft-06/schema #\"," + " \" 描述\”,\“地理坐标 \"," + " \" 类型\”:\”对象 \"," + " \" 属性 \": {" + " \" 纬度 \": {" + " \" 类型\”:\“号码 \"" + " }," + " \" 经度 \": {" + " \" 类型\”:\“号码 \"" + " }" + " }," + " \" 要求\”:[\“纬度\”,\“经度 \"]" + " }" )));
set字段可以通过相应的getter方法访问。
对象的模式验证配置集合
,可以使用modifyCollection ()
方法并传递给它ModifyCollectionOptions
对象的字段与CreateCollectionOptions
对象之外的重用
字段,该字段不存在ModifyCollectionOptions
对象。为验证
对象的一个ModifyCollectionOptions
对象,用户可以设置其水平
或模式
,或两者兼而有之。下面是使用modifyCollection ()
要更改模式验证配置:
模式。modifyCollection (collName新ModifyCollectionOptions新验证()().setValidation (.setLevel ValidationLevel.OFF .setSchema(“{\ \“id”:\“http://json-schema.org/geo \"," + "\"$ 模式\”,\“http://json-schema.org/draft-06/schema #\"," + " \" 描述\”,\“新地理坐标 \"," + " \" 类型\ ":\ "对象 \"," + " \" 属性\”:{" + " \ "纬度 \": {" + " \" 类型\”:\“号码 \"" + " }," + " \" 经度 \": {" + " \" 类型\”:\“号码 \"" + " }" + " }," + " \" 要求\”:[\“纬度\”,\“经度 \"]" + " }" )));
如果Collection包含没有根据通过提供的新JSON模式进行验证的文档ModifyCollectionOptions
,服务器就会拒绝这个错误的模式修改错误5180 (HY000)文档根据分配给集合的模式无效
。
createCollection ()
和modifyCollection ()
是重载的:它们可以被调用而不传递CreateCollectionOptions
或者是ModifyCollectionOptions
在这种情况下,模式验证将不会应用于集合
。