Я просмотрел несколько похожих вопросов, но не смог найти то, что искал. Я пытаюсь сохранить объект с таким форматом в таблицу postgres:
class C {
var id: Int? = null
var name: String? = null
var attributes: Map<String, Any> = mapOf()
}
Все, что я буду делать, это записать эти объекты и прочитать их в таблицу, а также выполнить фильтрацию по одному из атрибутов. После некоторых исследований мне показалось, что JSONB может быть хорошим форматом для использования, поэтому я создал таблицу вроде:
CREATE TABLE IF NOT EXISTS fake_table (
id INTEGER NOT NULL,
name TEXT NOT NULL,
attributes JSONB NOT NULL,
PRIMARY KEY (id)
);
Не уверен, как преобразовать карту в объект, который можно записать в базу данных. Прямо сейчас мой картограф выглядит примерно так:
interface ItemMapper {
@Insert("""
INSERT INTO fake_table (
id, name, attributes
) VALUES (
#{id}, #{name}, #{attributes}
)""")
fun add(item: Item)
}
и мне просто нужно преобразовать класс C в класс Item, который будет совместим?
class Item {
var id: Int? = null
var name: String? = null
var attributes: someJsonObject? = null /// <------ what to do here?
constructor(c: C) {
id = c.id
name = c.name
attributes = c.attributes.magicJSONconverter() // <------- what to do here?
}
}
Мне удалось заставить это работать, преобразовав атрибуты в String, но тогда я не смог легко отфильтровать запрос (я полагаю?), Что является нарушителем.