PostgreSQL JSONB在Java Hibernate 6中的JDBC类型码问题

4

我使用Hibernate 6进行持久化,实体上使用了以下注解:

@JdbcTypeCode(SqlTypes.JSON)

private String value;

当你保存到数据库时,请将其包装在引号中,并在json内部转义引号:

"{\"name\":\"pepito\", \"lastname\":\"perez\"}"

当我使用查询选择value时,“name”无法正常工作,我不明白为什么不能以以下方式保存到数据库:

{"name":"pepito", "lastname":"perez"}

谢谢。


1
为了实现这个功能,我不得不使用以下库:<groupId>com.vladmihalcea</groupId> <artifactId>hibernate-types-60</artifactId>并在实体中添加以下代码:@Type(JsonBinaryType.class) @Column(name = "value", columnDefinition = "jsonb") private String value;数据库中的结果如下: {"name":"pepito", "lastname":"perez"} - Gabriel
你是在评论中给出解决方案而不是创建一个答案帖子吗? - Yunnosch
2个回答

5
Hibernate ORM 6.1.3.Final已经修复了这个问题,使用@JdbcTypeCode(SqlTypes.JSON)@JdbcTypeCode(SqlTypes.SQLXML)注释的字符串将不再被序列化为JSON/XML。相反,它们将被解释为普通的JSON/XML,以避免序列化/反序列化带来的开销。
参考链接: https://in.relation.to/2022/09/08/hibernate-orm-613-final/

1
您在这里看到的是Hibernate将字符串序列化为JSON。我想这样做并不是很有用,Hibernate可以将一个字符串解释为普通的JSON,但最终,我建议您将其建模为java.util.Map,然后将其序列化为您期望的正确的JSON表示形式。
无论哪种方式,我为此创建了一个Hibernate问题(HHH-15458),因为我理解当人们不关心他们的模型中JSON结构的表示方式时,这是他们期望的工作方式。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接