JPA + Hibernate。用于生产和测试环境的不同列类型

时间:2017-09-22 05:02:43

标签: java postgresql hibernate jpa h2

我已经完成了有关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]

任何想法如何为测试环境解决这个问题。

0 个答案:

没有答案