如何在 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
使用 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