【问题标题】:QueryDsl in JSONB column postgresqlJSONB 列 postgresql 中的 QueryDsl
【发布时间】:2020-09-28 09:40:36
【问题描述】:

我有一个包含 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列

【问题讨论】:

  • 您需要实现并注册一个自定义类型:querydsl.com/static/querydsl/latest/reference/html/ch02s03.html
  • @Jan-WillemGmeligMeyling 你有没有一些例子,因为我在引用的链接中没有看到任何带有 jsonb 列的内容
  • 不,遗憾的是没有任何 JSONB 示例,QueryDSL 不支持开箱即用,因为它是 PostgreSQL 特定的。你必须自己做饭。

标签: postgresql jsonb querydsl


【解决方案1】:

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-&gt;&gt; "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")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-08
    • 1970-01-01
    • 1970-01-01
    • 2019-12-17
    • 1970-01-01
    • 2019-09-04
    • 2018-05-14
    相关资源
    最近更新 更多