powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Converter. Поле PostgreSQL jsonb. Как сохранить поле с типом JsonNode
4 сообщений из 4, страница 1 из 1
Converter. Поле PostgreSQL jsonb. Как сохранить поле с типом JsonNode
    #39937511
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем, привет!

Добавил довольно-таки стандартный конвертер:

Есть поле в классе с аннотацией конвертера:
@Convert(converter = JpaConverterJson.class)
private JsonNode src;

Сам конвертер:
JpaConverterJson
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
@Converter(autoApply = true)
public class JpaConverterJson implements AttributeConverter<JsonNode, String> {

    private final static ObjectMapper objectMapper = new ObjectMapper();

    @Override
    public String convertToDatabaseColumn(JsonNode meta) {
        try {
            String string = objectMapper.writeValueAsString(meta);
            return string;
        } catch (JsonProcessingException ex) {
            return null;
            // or throw an error
        }
    }

    @Override
    public JsonNode convertToEntityAttribute(String dbData) {
        try {
            return objectMapper.readValue(dbData, JsonNode.class);
        } catch (IOException ex) {
            // logger.error("Unexpected IOEx decoding json from database: " + dbData);
            return null;
        }
    }

}



В результате могу читать из бд этот объект, но не могу сохранять через стандартный метод JpaRepository - repository.save()
Потому что:
Caused by: org.postgresql.util.PSQLException: ERROR: column "src" is of type jsonb but expression is of type character varying
Подсказка: You will need to rewrite or cast the expression.

Что логично, метод конвертера String convertToDatabaseColumn, а нужно кастануть в jsonb

Реально ли как-то сделать это без NativeQuery? И пока даже не уверен, что и через это можно, хотя если в запросе указать все поля объекта.. Пока так попробую, но что-то мне сам этот способ не особо нравится, похоже на костыль и нестандартное решение :)
...
Рейтинг: 0 / 0
Converter. Поле PostgreSQL jsonb. Как сохранить поле с типом JsonNode
    #39937515
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изначально поле было
@Type(type = "JsonbDataUserType")
private JsonObject src;

ну и над классом было @TypeDef(name = "JsonUserType", typeClass = JsonUserType.class)

и на вход метода сохранения в контроллере было @RequestBody JsonNode jsonNode
что не очень-то нравилось, приходилось это поле src выдирать из JsonNode, в dto его потом мапить как toString() т.к. в dto поле src уже было String. Сейчас в dto тоже private JsonNode src; чтобы маппить entity to Dto без лишних итераций с полями.
...
Рейтинг: 0 / 0
Converter. Поле PostgreSQL jsonb. Как сохранить поле с типом JsonNode
    #39937539
SpringMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Видел это добро?
...
Рейтинг: 0 / 0
Converter. Поле PostgreSQL jsonb. Как сохранить поле с типом JsonNode
    #39937704
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SpringMan
Видел это добро?

Да, не хочу дополнительные либы какие-то добавлять. Похоже вернусь к старому рабочему коду сейчас)
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Converter. Поле PostgreSQL jsonb. Как сохранить поле с типом JsonNode
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]