Kotlin, Postgres: Как сохранить атрибут, который является картойв JSONB? - PullRequest
0 голосов
/ 09 марта 2019

Я просмотрел несколько похожих вопросов, но не смог найти то, что искал. Я пытаюсь сохранить объект с таким форматом в таблицу 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, но тогда я не смог легко отфильтровать запрос (я полагаю?), Что является нарушителем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...