java - 有没有一种方法可以让我们使用嵌入式数据库来测试 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);
解决方案
如果您使用的是 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 的方式。
推荐阅读
- include-path - eiffel:类型基于未知类(即使在库中可见)
- c# - .NET Framework 和 .NET Core 中的进程地址不同
- sql - SQL 将两张表合并为一张表中的行
- mysql - 如何在 symfony 学说中使用 group by 在多个实例中恢复单个实例?
- javascript - IMPORTXML Google 表格查询 HTML
- php - 如何使用 PHP 和 MySQL 计算正在运行的函数的并发实例?
- java - 向 TableView 添加新列 - JAVA FX
- vb.net - 如何从 TextBox 的表单值设置 Crystal Report 的 FormulaFiled 值
- html - 单击Angular 9中的按钮后如何显示表单?
- javascript - isometric shape 图片