首页 > 解决方案 > 有没有一种方法可以让我们使用嵌入式数据库来测试 Postgres Jsonb 查询以进行单元测试?

问题描述

我想在 Java Spring-boot Postgres 本机查询中对 jsonb 数据类型进行单元测试,而不会触及实际的 DB。而不是使用一些嵌入式数据库或其他方法,但是像 H2 这样的嵌入式数据库不支持 Postgres jsonb 特定的运算符,比如->>#>>

有没有办法我可以做到这一点?还请为此建议任何其他方法。

查询示例:

@Query(value = "SELECT * FROM table WHERE column ->> 'Id'=?1", nativeQuery = true)
public Entity fertchById(String id);

标签: javapostgresqlspring-bootjsonbembedded-database

解决方案


如果您使用的是 H2 数据库,并且希望在JSONB不使用 docker 和 testcontainers(在评论中提到)的情况下使用 PostgreSQL 功能,您可以定义您的自定义 H2 方言。

我在这里找到了这种方言的一个例子:

public class CustomH2Dialect extends H2Dialect {

    public CustomH2Dialect() {
        this.registerColumnType(Types.JAVA_OBJECT, "jsonb");
    }


    @Override
    public void contributeTypes(TypeContributions typeContributions, ServiceRegistry serviceRegistry) {
        super.contributeTypes(typeContributions, serviceRegistry);
        typeContributions.contributeType(new JsonStringType(), "jsonb");
    }
}

如您所见,Liquibase 的问题仍然存在,您绝对应该考虑使用 testcontainers或其他直接使用 PostgreSQL 的方式。


推荐阅读