【问题标题】:Spring boot hibernate types exception creating table with JSON fieldSpring Boot休眠类型异常创建带有JSON字段的表
【发布时间】: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> {
}

【问题讨论】:

    标签: java mysql spring-boot hibernate spring-data-jpa


    【解决方案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,它将工作,因为它是受支持的本机数据类型。干杯。
    猜你喜欢
    • 2020-12-16
    • 2017-08-10
    • 1970-01-01
    • 1970-01-01
    • 2020-01-19
    • 2011-12-20
    • 2021-08-07
    • 2014-06-09
    • 1970-01-01
    相关资源
    最近更新 更多