将jsonb记录映射到自定义数据类型的正确方法是什么? 就像普通的表字段一样.

create table t_order
(
    id    serial
        constraint t_order_pk
            primary key,
    key   varchar(255) not null,
    value jsonb        not null
);

create unique index t_order_id_uindex
    on t_order (id);

create index t_order_value_index
    on t_order using gin (value);
@Data
@Builder
class Order {

  private List<OrderItem> orderItems;

  @Data
  @Builder
  public static class OrderItem {

    private BigDecimal price;
    private BigDecimal quantity;
  }
}
@Test
  void findOrderById() {
    var order =
        dsl.select(T_ORDER.VALUE)
            .from(T_ORDER)
            .where(T_ORDER.ID.eq(1))
            .fetchOptionalInto(Order.class); // OOPS!
    assertTrue(order.isPresent());
    log.info(order);
}

推荐答案

如果您在类路径上放置gsonjackson,jOOQ的DefaultConverterProvider将自动使用它们将您的JSONB内容映射到您的数据,因此这应该是您所需要做的全部工作.

Java相关问答推荐

neo4j java驱动程序是否会在错误发生时自动回滚事务?

有没有办法让扩展变得多态?

声明MessageChannel Bean的首选方式

将PNG转换为位图自定义十六进制字符串

如何使用log4j2(Json)记录由";异常引起的所有";?

支持MySQL 5.6的最新Hibernate版本

在settings.gradle.kts和Build.gradle.kts中使用公共变量

AbstractList保证溢出到其他方法

如何在IntelliJ IDEA的Build.sbt中添加外部JAR文件?

使用for循环时出现堆栈溢出错误,但如果使用if块执行相同的操作,则不会产生错误

如何使用jooq更新记录?

无法在IntStream上应用Collectors.groupingBy

整数->;双取消框,但双->;int不';t开箱.为什么?

OpenJDK20:JEP434:Foreign Function&;内存API(第二次预览)

SonarQube在合并升级到java17后对旧代码提出错误

将Optionals/null安全添加到嵌套的flatMap/流

Keycloak + Spring Boot 角色认证不起作用

如何对 Collectors.Counting() 的结果进行算术运算?

如何使 JavaFx 中的表视图响应式?

枚举中的泛型用于复杂类型判断