我已经完成了有关stackoverflow的所有现有问题,虽然这些问题看起来很相似,但没有一个问题解决了问题,问题不是重复问题。
在制作中,我们计划使用PostgreSQL,并测试环境H2。 我们有模特
@TypeDefs({@TypeDef(name = "json", typeClass = JsonStringType.class)})
@Entity
@Table(name = "consumer_details")
public class ConsumerDetails implements Serializable {
private String name;
@Type(type = "json")
private ConsumerRequest info;
}
public class ConsumerRequest implements Serializable {
private String clientName;
}
Postgres支持数据类型Json和Jsonb。我们将ConsumerRequest保存为名为“info”的列,其数据类型为ConsumerDetails表中的Jsonb。为了支持Json,我们覆盖了Postgres方言
public class CustomPostgresqlDialect extends PostgreSQL94Dialect {
public CustomPostgresqlDialect() {
super();
this.registerColumnType(Types.JAVA_OBJECT, "jsonb");
}
}
这适用于Postgres支持的prod环境。但由于H2 DB不支持json数据类型,因此无法在H2 DB中测试环境。我尝试重写H2Dialect为
public class CustomH2Dialect extends H2Dialect {
public CustomH2Dialect() {
super();
this.registerColumnType(Types.LONGVARCHAR, "json");
}
}
但它不起作用,我得到例外
WARN o.h.e.jdbc.spi.SqlExceptionHelper - SQL Error: 90026, SQLState: 90026
[http-nio-auto-1-exec-1] ERROR o.h.e.jdbc.spi.SqlExceptionHelper -
Serialization failed, cause: "java.io.NotSerializableException:
com.fasterxml.jackson.databind.node.ObjectNode" [90026-196]
任何想法如何为测试环境解决这个问题。