postgresql - 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 列
解决方案
QueryDSL 不支持对 PostgreSQL jsonb 列的查询。我有一种解决方案适用于使用 QueryDSL 对 PostgreSQL 字段进行查询。解决步骤:
- 使用 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)
现在您创建一个代表该视图的域对象。
@Table(name="view_b") public class ViewB{...}
现在您可以使用查询 DSL 进行查询。像 qViewB.xyz.eq("value")
推荐阅读
- python - 如何使用 Python 主脚本中定义的变量运行下标?
- c - Lua:“隐藏”功能
- python - 如何使用 Pandas 计算两个 cumsum 列之间的差异
- java - 我找不到从列表中选择项目的方法,每个项目由三个文本字段组成
- docker - ddev 设置中除了 web 和 db 容器之外的其他 SQL Server db 容器
- android - 是否有一个 AppBar 完全动态的高度和背景颜色?
- python - 如何在数据框熊猫python中省略数据
- typescript - 用 TypeScript 解决闭包模式?
- c++ - Winsock 中的 Recv() 需要有符号缓冲区
- php - 如何使用 Google 的 credentials.json 文件在 Heroku 上部署 PHP Laravel 应用程序?