这是我的实体类,映射到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
中创建记录时出现此错误:错误:列“metadata”的类型为jsonb
,但表达式的类型为bytea
提示:您需要重写或强制转换表达式。
这是我试图在db中持久化的请求主体:
{
“name”: “Test102”,
“code”: “Code102”,
“metadata”: {
“field1”: “field11”,
“field2”: “field12”
}
}
请帮助如何转换bytea
类型为jsonb
在javaSpring启动应用程序
您可以获得以下PostgreSQL:
错误:列"元数据"的类型是jsonb,但表达式的类型是by tea提示:您需要重写或强制转换表达式。
如果您正在执行本机SQL DML语句。
例如,假设您想要执行以下操作:
int updateCount = entityManager.createNativeQuery("""
UPDATE
room_categories
SET
metadata = :metadata
WHERE
code = :code AND
metadata ->> 'field1' is null
""")
.setParameter("code ", "123-ABC")
.setParameter(
"metadata",
new Metadata()
.setField1("ABC")
.setField2("123")
)
.executeUpdate();
bytea
类型代表字节数组,由于元数据
类型实现了Serializable
接口,因此当没有其他类型更合适时,Hibernate会使用SerializableType
。
但是,由于无法将字节数组绑定到jsonb
列,PostgreSQL会抛出上述错误。
要修复它,我们必须使用Hibernate特有的setParameter
Query
方法显式设置JsonBinaryType
:
int updateCount = entityManager.createNativeQuery("""
UPDATE
room_categories
SET
metadata = :metadata
WHERE
code = :code AND
metadata ->> 'field1' is null
""")
.setParameter("code ", "123-ABC")
.unwrap(org.hibernate.query.Query.class)
.setParameter(
"metadata",
new Metadata()
.setField1("ABC")
.setField2("123"),
JsonBinaryType.INSTANCE
)
.executeUpdate();
首先,我们必须unwrap
JPAQuery
到Hibernateorg。冬眠查询查询
并调用接受Hibernate类型实例的setParameter
方法。
现在,Hibernate将知道元数据
参数需要由JsonBinaryType
处理,而不是由SerializableType
处理。
只需通过ObjectMapper将对象转换为json字符串,然后使用(::jsonb)转换为jsonb类型:
INSERT INTO room_categories (name, code, metadata)
VALUES (?, ?, ? ::jsonb );
(需要使用本机查询来查询存储为jsonb的数据)
在Spring Boot的一个项目中,Java8使用hibernate-spatial和PostgresDB 9.4 应用程序属性 (我也尝试了PostgisPG9Dialect) 我的实体有一个属性 如果我用空值保存就可以了,但是如果我放一个值 我有: 在我的数据库中,我可以看到列定义为 我要疯了...为什么它不起作用? 更新(仍然不起作用,我正在收集新信息) 1)我认为问题可能是数据库的创建。
问题内容: 在不同数据库之间进行切换时,关于包含大对象(BLOB)的hibernate映射,我有一个奇怪的问题。 上面的字段在MySQL和Oracle中创建一个字节数组字段,但是在PostreSQL中,它创建一个oid类型的字段。 现在,当我尝试访问该字段时,它在其他数据库中也能正常工作,但是在PostgreSQL中,它失败并显示以下错误 因此,我试图简单地删除“ @Lob”注释,这将解决Post
我需要使用SpringDataJPA将实体类的两列映射为postgres中的json。阅读多个stackoverflow post和baeldung post后, 如何使用JPA将MapJSON列映射到Java对象 https://www.baeldung.com/hibernate-persist-json-object 我做了如下配置。但是,我面临错误"ERROR:列"标题"是json类型,但
在我将PostgreSQL 13个数据库列标记更改为jsonb后,执行sql时抛出错误: 在使用mybatis时,我应该如何处理spring boot应用程序中的jsonb?
我正在尝试使用nifi将CSV记录插入Postgres数据库。 示例csv文件: 当nifi场景运行时,它会给出以下错误 错误列“timenow”的类型为timestamp,没有时区,但表达式的类型为character variating 如果我使用正常的 没有错误值插入到表中。我必须更改nifi配置才能将其添加到表中吗? 我换了Nifi CSVReader- 编辑:在第一条注释之后,Nifi生成
如果我以通常的方式声明一个类,我可以使用类名作为类型: 但是,如果我通过将类表达式分配给变量来声明一个类,我就不能将该名称用作类型: 建议使用不起作用,因为我想要的实例类型,而不是类本身的类型。 typescript操场示例 如何获取以第二种方式定义的类的实例类型? 我对以这种方式定义类感兴趣的原因是,我希望有一个接口来描述某些类将具有的静态方法,如此处的手册中所述(该部分中的第三个示例)。 下面