Как делать вставку JSON данных в Postgres?

358
02 августа 2017, 19:52

Есть объект Phrase который имеет поле представленное как JSON объект, но при попытке записать его в колонку с соответствующим типом падает:

Caused by: org.postgresql.util.PSQLException: ERROR: column "phrase" is of type json but expression is of type bytea Подсказка: You will need to rewrite or cast the expression.

Сам объект:

public class Phrase {
    private int id;
    private PGobject phrase;
    public Phrase() {
    }
    public Phrase(int id, String phraseVal) throws SQLException {
        this.id = id;
        phrase = new PGobject();
        phrase.setType("json");
        phrase.setValue(phraseVal);
    }
    ...геттеры и сеттеры...
}

Метод добавления в базу:

public void addPhrase(final Phrase phrase) {
    try (final Session session = factory.get().openSession()) {
        session.beginTransaction();
        session.save(phrase);
        session.getTransaction().commit();
    }
}

А вызываю я это так:

final Phrase phrase = new Phrase(1, new Gson().toJson(mapWithDataForJson));
new DAOImpl(factory).addPhrase(phrase);

И вроде "танец с бубном" для кастинга в Postgres-json формат я исполнил но что-то все равно идет не так. Помогите пожалуйста разобраться. Как мне записать произвести вставку json поля?

Решение

phrase = new PGobject();
phrase.setType("json");
phrase.setValue(phraseVal);

Взято вот из этого вопроса (предпоследний ответ):

https://stackoverflow.com/questions/35844138/how-can-i-insert-json-object-into-postgres-using-java-preparedstatement

И на всякий случай таблица:

CREATE TABLE IF NOT EXISTS phrases (
    id SERIAL NOT NULL ,
    phrase JSON NOT NULL ,
    PRIMARY KEY (id)
);
READ ALSO
Получение значений в столбце JTable

Получение значений в столбце JTable

Существует JTable с 3 столбцами и 100 строкамиНужно по событию на таблице узнать какие данные лежат во втором столбце, т

244
Решение задачи по поиску года с максимальным количеством жителей

Решение задачи по поиску года с максимальным количеством жителей

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

234
Android Studio выбор SDK

Android Studio выбор SDK

В android studio в sdk manager возможно установить сразу несколько версийДолго гуглил, но так и не понял, какая версия активна при создании нового проекта?...

324
ListView внутри ListView со списками

ListView внутри ListView со списками

Я создал списокНапример: 1

208