PostgreSQL выдает «столбец типа jsonb, но выражение имеет тип bytea» с JPA и Hibernate - PullRequest
0 голосов
/ 19 декабря 2018

Это мой класс сущности, который сопоставлен с таблицей в postgres (9.4) Я пытаюсь сохранить метаданные как jsonb тип в базе данных

@Entity
@Table(name = “room_categories”)
@TypeDef(name = “jsonb”, typeClass = JsonBinaryType.class)
public class RoomCategory extends AbstractEntity implements Serializable {
    private String name;
    private String code;
    @Type(type = "jsonb")
    @Column(columnDefinition = "json")
    private Metadata metadata;

}

Это класс метаданных:

public class Metadata implements Serializable {
    private String field1;
    private String field2;

}

Я использовал следующий файл миграции для добавления jsonb столбца:

databaseChangeLog:
– changeSet:
id: addColumn_metadata-room_categories
author: arihant
changes:
– addColumn:
schemaName: public
tableName: room_categories
columns:
– column:
name: metadata
type: jsonb

Я получаю эту ошибку при создании записи в postgres: ОШИБКА: столбец «метаданные»”Имеет тип jsonb, но выражение имеет тип bytea Подсказка: вам нужно будет переписать или привести выражение.

Это тело запроса, которое я пытаюсь сохранить в db:

  {
    “name”: “Test102”,
    “code”: “Code102”,
    “metadata”: {
    “field1”: “field11”,
    “field2”: “field12”
    }
    }

Помогите, пожалуйста, как преобразовать тип bytea в jsonb в приложении java spring boot

1 Ответ

0 голосов
/ 19 декабря 2018

Если вы генерируете схему с hbm2ddl, убедитесь, что вы также используете тип jsonb на уровне @Column:

@Column(columnDefinition = "jsonb")

Теперь по вашему вопросу:

Я получаю эту ошибку при создании записи в postgres: ОШИБКА: столбец «метаданные» имеет тип jsonb, но выражение имеет тип bytea Подсказка: вам нужно будет переписать или привести выражение.

Непонятно, когда вы получите эту ошибку.Следовательно, вот что вам нужно сделать:

  1. Перейдите к проекту hibernate-types и разветвите его,
  2. Измените PostgreSQLJsonBinaryTypeTest для репликации вашей проблемы.
  3. Отправьте запрос на извлечение с реплицирующим тестовым набором.

После этого я посмотрю его и предоставлю более подробную информацию.

...