Spring Boot休眠类型异常创建带有JSON字段的表
Posted
技术标签:
【中文标题】Spring Boot休眠类型异常创建带有JSON字段的表【英文标题】:Spring boot hibernate types exception creating table with JSON field 【发布时间】:2020-12-16 21:42:17 【问题描述】:我需要带有 JSON 列的 mysql 表,因此我使用了 vladmihalcea/hibernate-types 依赖项,我按照官方文档做了示例,但我遇到了异常,我该如何克服这个异常。
执行 DDL 时出错“创建表 book (id bigint not null, isbn varchar(255),属性 jsonb,主键 (id)) engine=InnoDB" 通过 JDBC 语句
您的 SQL 语法有错误;检查手册 对应于您的 MySQL 服务器版本,以便使用正确的语法 靠近第 1 行的“jsonb,主键 (id)) engine=InnoDB”
实体类(我已经提交了getter和setter,以便在这里清楚地显示代码,应该添加getter和setter)
@Entity(name = "Book")
@Table(name = "book")
@TypeDef(
name = "jsonb",
typeClass = JsonBinaryType.class
)
public class Book
@Id
@GeneratedValue
private Long id;
@NaturalId
private String isbn;
@Type(type = "jsonb")
@Column(columnDefinition = "jsonb")
private String properties;
存储库接口
@Repository
public interface BookRepository extends JpaRepository<Book,Long>
【问题讨论】:
【参考方案1】:我可以通过改变来修复异常
@TypeDefs(
@TypeDef(name = "json", typeClass = JsonStringType.class),
@TypeDef(name = "jsonb", typeClass = JsonBinaryType.class)
)
而不是
@TypeDef(
name = "jsonb",
typeClass = JsonBinaryType.class
)
还有
@Type(type = "json")
@Column(columnDefinition = "json")
private String properties;
而不是
@Type(type = "jsonb")
@Column(columnDefinition = "jsonb")
private String properties;
我做错了,我遵循的是 PostgreSQL 代码示例而不是 mysql
【讨论】:
我很想知道它是如何工作的。 MySQL 没有 jsonb 数据类型。如果你执行这个:create table book ( id bigint not null, isbn_string varchar(255), properties jsonb, primary key (id) )
,你会得到一个错误。
@jumping_monkey 我弄错了,更新代码部分。
好的,是的,感谢更新,使用 json,它将工作,因为它是受支持的本机数据类型。干杯。以上是关于Spring Boot休眠类型异常创建带有JSON字段的表的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot 2.0.2.RELEASE 的模型验证异常
Spring Boot REST 多部分请求(文件 + json)抛出 415 Unsupported Media Type 异常
带有 MySQL 的 Spring Boot R2DBC - 异常:找不到表
带有多部分请求的 Spring Boot 不受支持的媒体类型