sql - 当java类有子类(jsonb)时,通过在JSONB上应用过滤器来查询postgresql中的数据
问题描述
我有一个 Employee 表,其中包含文件 id、姓名、年龄、地址(作为存储在 Postgres DB 中的 Jsonb 字符串)
@Entity
@Table(name = "Employee")
@TypeDef(name = "jsonb", typeClass = JsonBinaryType.class)
public class Employee implements Serializable {
@Id
@Column
@GeneratedValue(strategy = GenerationType.AUTO)
int Id;
@Column
String name;
@Column
int age;
@Column(columnDefinition = "jsonb")
@Type(type="jsonb")
Address address; // this field is JSONB data stored in postgress DB
// setter and getters
}
public class Address implements Serializable {
String flatNo;
String area;
String state;
// setter and getters
}
DB表数据格式:
id | name | age | address
---+----------+-----+--------------------------------------------------------
20 | Peter | 16 | {"area": "KKR", "state": "KARNATAKA", "flatNo": "456"}
21 | Nani | 20 | {"area": "CTM", "state": "TA", "flatNo": "111"}
我的查询是:我需要根据 jsonb 字段过滤数据。
就像需要基于 的员工全行详细信息一样area="KKR"
,由于区域不是员工的直接字段,我无法过滤数据。我是 Postgres 的新手。你能建议我做什么吗?
解决方案
在 SQL 中,您可以使用运算符执行此@>
操作:
select *
from employee
where address @> '{"area": "KKR"}';
或者使用->>
返回单个键值的运算符:
select *
from employee
where address ->> 'area' = 'KKR';
推荐阅读
- amazon-web-services - sam build --use-container 挂载目录失败
- javascript - 如何将与单选按钮分组的下拉列表值存储到数据库
- swagger - NRWL + NestJS 尝试使用 Swagger 插件
- c# - 多线程中的正确数据访问
- typescript - 我知道的最好的写数组类型的方法
- javascript - select2不显示选项
- arrays - 如何将数组值作为角度中的键值对
- r - 在 R 中合并数据集
- python-3.x - Python3 f 字符串与 .replace
- amazon-web-services - 有没有办法从现有的 aws 环境生成 serverless.yml?