这是我的实体类,已映射到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”
}
}
请帮助如何在Java Spring Boot应用中将bytea
类型转换为jsonb
答案 0 :(得分:2)
通过ObjectMapper将对象简单地转换为json字符串,然后将(:: jsonb)转换为jsonb类型:
INSERT INTO room_categories (name, code, metadata)
VALUES (?, ?, ? ::jsonb );
(您将需要使用本机查询来查询存储为jsonb的数据)
答案 1 :(得分:0)
如果要使用hbm2ddl
生成模式,请确保也在jsonb
级别使用@Column
类型:
@Column(columnDefinition = "jsonb")
现在,与您的问题有关:
我在postgres中创建记录时遇到此错误:错误:“元数据”列的类型为jsonb,但表达式的类型为bytea提示:您将需要重写或强制转换表达式。
尚不清楚何时收到此错误。因此,这是您需要做的:
PostgreSQLJsonBinaryTypeTest
以复制您的问题。随后,我将对其进行介绍并提供更多详细信息。