如何在 H2、JPA 和 Hibernate 中使用 jsonb 列

How to use a jsonb column with H2, JPA, and Hibernate

使用 Spring,当我尝试 运行 时,我的集成测试不起作用,因为 H2 数据库无法创建 table。这是错误:

org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL "create table foo (id binary not null, bar jsonb, primary key (id))" via JDBC Statement

我的实体定义如下:

@Entity(name = "foo")
@TypeDef(name = "jsonb", typeClass = JsonBinaryType.class)
public class Foo {
    @Id
    @GeneratedValue(generator = "UUID")
    @GenericGenerator(name = "UUID", strategy = "org.hibernate.id.UUIDGenerator")
    private UUID id;

    @Type(type = "jsonb")
    @Column(columnDefinition = "jsonb")
    private Object bar;
}

我的类型是通过 com.vladmihalcea:hibernate-types-52:2.14.0 定义的。

我的 h2 版本是 com.h2database:h2:2.0.202

如果我删除 bar 属性,它工作正常。

有什么线索吗?

jsonb 是 PostgreSQL 数据类型,在 H2 中不可用。与PG的json数据类型不同的是,它内部是以二进制结构存储的,更适合一些操作和索引。

H2 确实有 json 格式,但 https://www.h2database.com/html/datatypes.html#json_type