首页 > 解决方案 > 当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 的新手。你能建议我做什么吗?

标签: sqlpostgresqljsonbpostgresql-12

解决方案


在 SQL 中,您可以使用运算符执行此@>操作:

select *
from employee
where address @> '{"area": "KKR"}';

或者使用->>返回单个键值的运算符:

select *
from employee
where address ->> 'area' = 'KKR';

推荐阅读