【发布时间】:2021-02-02 00:30:13
【问题描述】:
在之前的项目中,我们在 MySQL 5.7.21 中成功使用了 hibernate-types JsonStringType。这有效(在 Kotlin 中):
@TypeDefs(
TypeDef(name = "JSON", typeClass = JsonStringType::class)
)
class SomeEntity {
// ...
@Type(type = "JSON")
@Column(nullable = false, columnDefinition = "JSON")
var data: SomeData = SomeData()
}
在一个新项目中,我们希望使用 MariaDB 10.5.4 做同样的事情。使用 MariaDB,我们在使用 hbm2ddl=validate 进行架构验证时收到以下错误:
SchemaManagementException: Schema-validation: 在表 [
some_entity] 的列 [data] 中遇到错误的列类型;找到 [longtext (Types#LONGVARCHAR)],但期待 [json (Types#OTHER)]"。
据我所知,hibernate-types 并未正式支持 MariaDB。在 MariaDB 中,JSON 只是带有CHECK (JSON_VALID(column)) 约束的LONGTEXT 的别名。
如果我们使用columnDefinition = "LONGTEXT" 而不是columnDefinition = "JSON",它可以工作,但是,CHECK 约束将不会与hbm2ddl=create 一起生成。
有没有人知道如何两全其美? IE。创建检查约束并通过模式验证?
【问题讨论】:
标签: json hibernate mariadb hibernate-types