Java 有没有一种方法可以使用嵌入式数据库进行单元测试来测试PostgresJSONB查询?

Java 有没有一种方法可以使用嵌入式数据库进行单元测试来测试PostgresJSONB查询?,java,postgresql,spring-boot,jsonb,embedded-database,Java,Postgresql,Spring Boot,Jsonb,Embedded Database,我想在Java Spring boot Postgres native query中对jsonb数据类型进行单元测试,而不影响实际的数据库。相反,使用一些嵌入式数据库或其他方法,但是像H2这样的嵌入式数据库不支持Postgres jsonb特定的操作符,如->,>等 有什么方法可以让我做到这一点吗?同时,请提出任何其他方法 查询示例: @Query(value = "SELECT * FROM table WHERE column ->> 'Id'=?1", nativeQuery

我想在Java Spring boot Postgres native query中对jsonb数据类型进行单元测试,而不影响实际的数据库。相反,使用一些嵌入式数据库或其他方法,但是像H2这样的嵌入式数据库不支持Postgres jsonb特定的操作符,如
->
>

有什么方法可以让我做到这一点吗?同时,请提出任何其他方法

查询示例:

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

如果您使用的是H2数据库,并且希望使用
JSONB
PostgreSQL特性,而不使用docker和testcontainers(在注释中提到过),那么您可以定义自定义H2方言

我发现了这样一种方言的一个例子:

公共类CustomH2方言扩展H2方言{
公共习惯用语(){
registerColumnType(Types.JAVA_对象,“jsonb”);
}
@凌驾
公共无效贡献类型(类型贡献类型贡献,ServiceRegistry ServiceRegistry){
super.contributeTypes(类型贡献、服务注册);
ContributType(新的JsonStringType(),“jsonb”);
}
}

正如您所看到的,Liquibase的问题仍然悬而未决,您肯定应该考虑直接使用PostgreSQL的其他方法

使用testcontainers之类的工具来引导PostgreSQL,这确实需要docker可用。嵌入式解决方案不起作用,jsonb的东西是针对PostgreSQL的,因此不使用其他数据库来测试特定于Postgres的东西显然是不起作用的。如果您需要一个工作和行为类似于Postgres的数据库,您唯一的选择就是使用Postgres。如果你想知道你的查询在postgres上是否正常工作,那么任何针对“模拟数据库”的测试都是毫无意义的。我同意你应该在Testcontainers上使用postgres。但这里有一个答案,我可以将H2与jsonb一起使用,但对于postgres特定的运算符,它不提供任何支持,并且对于允许H2存储jsonb,您可以在属性文件中使用其他数据类型创建一个域,同时将H2定义为数据源。例如:spring.datasource.url=jdbc \:H2 \:mem db;DB_关闭_退出\=真;模式\=PostgreSQL;INIT\=如果不存在架构,则创建架构\\;如果不存在jsonb,则创建域作为其他域;Jagjit的方法为我解决了这个问题,其他方法都不起作用,我现在使用:
url:jdbc:h2:mem:test;模式=PostgreSQL;DB_CLOSE_DELAY=-1;INIT=创建不存在的模式myschema\;如果不存在jsonb,则创建域作为其他域