Не удалось обновить значение столбца типа json за исключением

1

Я использую postgresql и один из моих столбцов имеет тип json.

Я использую REST API, и ответ, который я получаю, представляет собой строку json, которую я храню в этом столбце json.

Используя Hibernate, я не могу выполнить обновление для этого столбца.

ПРИМЕЧАНИЕ. Я использую google Gson чтобы сделать его json и сохранить его в db.

Пример:

Gson gson = new Gson();
myBean.setJsonData(gson.toJson(response));
myHomeDao.attachDirty(myBean); //Error Here

ЖУРНАЛ:

Caused by: org.postgresql.util.PSQLException: ERROR: column json_data" is of type json but expression is of type bytea
  Hint: You will need to rewrite or cast the expression.
  Position: 247
    at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2198)
    at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1927)
    at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:561)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:419)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:365)
    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:208)
    ... 16 more
  • 0
    Выложите пожалуйста код myHomeDao.attachDirty
  • 0
    Это было автоматически сгенерировано процессом генерации кода в спящем режиме и отлично работает для других столбцов. Код - Transaction trans=sessionFactory.getCurrentSession().beginTransaction(); sessionFactory.getCurrentSession().saveOrUpdate(instance); trans.commit();
Теги:
hibernate
gson
restlet

1 ответ

1
Лучший ответ

Это похоже на ошибку от Postgre, я нашел это обходное решение, которое вы можете использовать для решения своей проблемы.

Если это не поможет, возможно, вам понадобится написать настраиваемый тип hibernate, который использует метод setObject для драйверов jdbc вместо использования текста или байта.

Надеюсь, поможет!

  • 0
    Я думаю, что вы правы, хотя кажется странным, что в такой базе данных, как Postgre может быть такая ошибка, когда вам просто нужно сохранить json, и вы не найдете способа сделать это в обычном спящем режиме, а затем написать собственный запрос. В любом случае, я нашел способ написать запрос на обновление вместо спящего режима по умолчанию saveOrUpdate, который работал.
  • 0
    @MyGod, да, это действительно странно, я искал решение и ничего похожего на исправление ошибки, нужно сделать обходной путь, в любом случае, я рад помочь!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню