Запрос данных в postgresql путем применения фильтра к JSONB Когда класс java имеет подкласс (jsonb)

У меня есть таблица Employee с идентификатором поля, именем, возрастом, адресом (как строка 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
}

Формат данных таблицы БД:

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", поскольку область не является прямым полем сотрудника, я не могу фильтровать данные. Я новичок в Постгресе. Не могли бы вы предложить мне, что делать?


person user3347069    schedule 16.05.2020    source источник


Ответы (1)


В SQL это можно сделать с помощью оператора @>:

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

Альтернативно с оператором ->>, который возвращает одно значение для ключа:

select *
from employee
where address ->> 'area' = 'KKR';
person a_horse_with_no_name    schedule 16.05.2020