将PostgreSQL JSON列映射到Hibernate值类型

将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() {
    }}

一个简单的解决方法是定义文本列。


PIPIONE
浏览 1360回答 3
3回答

倚天杖

见PgJDBC bug#265。PostgreSQL对数据类型转换过于严格,非常严格。它不会隐式地text转换为类似文本的值,例如xml和json。解决此问题的严格正确方法是编写使用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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java