将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个赞
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
添加回答
举报
0/150
提交
取消