当java类有子类(JSONB)时,通过在JSONB上应用过滤器在postgresql中查询数据

当java类有子类(JSONB)时,通过在JSONB上应用过滤器在postgresql中查询数据,sql,postgresql,jsonb,postgresql-12,Sql,Postgresql,Jsonb,Postgresql 12,我有一个表Employee,其fileds id、name、age、Addressas Jsonb字符串存储在Postgres数据库中 @Entity @Table(name = "Employee") @TypeDef(name = "jsonb", typeClass = JsonBinaryType.class) public class Employee implements Serializable { @Id @Column @GeneratedValue(strategy = G

我有一个表Employee,其fileds id、name、age、Addressas Jsonb字符串存储在Postgres数据库中

@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
}
数据库表数据格式:

身份证|姓名|年龄|地址 --+-----+---+---------------------------- 20 |彼得| 16 |{地区:KKR,州:卡纳塔克邦,弗拉特诺:456} 21 |纳尼| 20 |{地区:CTM,州:TA,弗拉特诺:111} 我的问题是:我需要根据jsonb字段过滤数据


比如需要基于area=KKR的员工全行详细信息,因为area不是员工的直接字段,所以我无法过滤数据。我是博士后的新手。你能建议我怎么做吗

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

select *
from employee
where address @> '{"area": "KKR"}';
或者使用->>运算符为键返回单个值:

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