首页 > 解决方案 > JSONB 列 postgresql 中的 QueryDsl

问题描述

我有一个具有 jsonb 列的对象。有没有办法使用 querydsl 查询到这个 jsonb 列?

这是我的对象的示例:

public class Person {
  @Type(type = "jsonb")
  @Column(columnDefinition = "jsonb")
  private PersonDocument personDocument;

}


public class PersonDocument {
  private int documentType;
  private List<DocumentDetail> documentDetails;
}

public class DocumentDetail {
  private String country;
  private String documentId;
  private LocalDate expiryDate
}

我想按 documentId 搜索人,所以我需要到 documentId 列

标签: postgresqljsonbquerydsl

解决方案


QueryDSL 不支持对 PostgreSQL jsonb 列的查询。我有一种解决方案适用于使用 QueryDSL 对 PostgreSQL 字段进行查询。解决步骤:

  1. 使用 jsonb 列所在的表创建数据库视图。该视图用于将您的 jsonb 转换为表普通表结构。像表 A(j jsonb) 现在你想要 A 表中“j”jsonb 列中的字段“xyz”。您可以应用以下查询:

CREATE OR REPLACE VIEW view_b as select a.id as a_id,a->> "xyz" as xyz from A a

现在,查看表结构view_b(a_id,xyz)

  1. 现在您创建一个代表该视图的域对象。

    @Table(name="view_b") public class ViewB{...}

  2. 现在您可以使用查询 DSL 进行查询。像 qViewB.xyz.eq("value")


推荐阅读