为了账号安全,请及时绑定邮箱和手机立即绑定

将PostgreSQL JSON列映射到Hibernate值类型

将PostgreSQL JSON列映射到Hibernate值类型

PIPIONE 2019-08-12 16:20:34
将PostgreSQL JSON列映射到Hibernate值类型我的PostgreSQL DB(9.2)中有一个带有JSON类型列的表。我很难将此列映射到JPA2实体字段类型。我试图使用String,但是当我保存实体时,我得到一个异常,它无法将字符变换为JSON。处理JSON列时使用的正确值类型是什么?@Entitypublic class MyEntity {     private String jsonPayload; // this maps to a json column     public MyEntity() {     }}一个简单的解决方法是定义文本列。
查看完整描述

3 回答

?
倚天杖

TA贡献1828条经验 获得超3个赞

见PgJDBC bug#265

PostgreSQL对数据类型转换过于严格,非常严格。它不会隐式地text转换为类似文本的值,例如xmljson

解决此问题的严格正确方法是编写使用JDBC setObject方法的自定义Hibernate映射类型。这可能有点麻烦,所以你可能只想通过创建一个较弱的强制转换来使PostgreSQL不那么严格。

正如@markdsievers在评论和此博客文章中所指出的,此答案中的原始解决方案绕过了JSON验证。所以这不是你想要的。写起来更安全:

CREATE OR REPLACE FUNCTION json_intext(text) RETURNS json AS $$
SELECT json_in($1::cstring); $$ LANGUAGE SQL IMMUTABLE;CREATE CAST (text AS json) WITH FUNCTION json_intext(text) AS IMPLICIT;

AS IMPLICIT 告诉PostgreSQL它可以转换而不被明确告知,允许这样的事情工作:

regress=# CREATE TABLE jsontext(x json);CREATE TABLE
regress=# PREPARE test(text) AS INSERT INTO jsontext(x) VALUES ($1);PREPARE
regress=# EXECUTE test('{}')INSERT 0 1


查看完整回答
反对 回复 2019-08-12
  • 3 回答
  • 0 关注
  • 1359 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信