相关疑难解决方法(0)

将PostgreSQL JSON列映射到Hibernate值类型

我的PostgreSQL DB(9.2)中有一个带有JSON类型列的表.我很难将此列映射到JPA2实体字段类型.

我试图使用String,但是当我保存实体时,我得到一个异常,它无法将字符转换为JSON.

处理JSON列时使用的正确值类型是什么?

@Entity
public class MyEntity {

    private String jsonPayload; // this maps to a json column

    public MyEntity() {
    }
}
Run Code Online (Sandbox Code Playgroud)

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

java postgresql json hibernate jpa

72
推荐指数
5
解决办法
7万
查看次数

JPA(EclipseLink)自定义类型是否可行?

特别是我对使用PostgreSQLs json类型感兴趣.

问题的核心似乎是Eclipselink中没有内部映射来json 键入.因此,使用一种天真的方法:

@Column(name = "json", columnDefinition = "json")
public String getJson() {
    return json;
}
Run Code Online (Sandbox Code Playgroud)

...并尝试插入一个对象,我得到一个例外:

Internal Exception: org.postgresql.util.PSQLException: ERROR: column "json" is of type json but expression is of type character varying
Run Code Online (Sandbox Code Playgroud)

我觉得很公平.

通过EclipseLink文档,似乎适用的自定义(转换映射,本机查询,转换器)依赖于由支持的映射(数字,日期,字符串等)组成的数据,因此使得使用它变得非常尴尬供应商特定类型.

这是如此令人沮丧的主要原因是jsonposgresql 中的类型表达与text/varchar相同,我相信(目前,但不是永远)只是该类型的别名 - 因此驱动程序能够传输这个,这只是我的验证规则.

就解决方案而言,我不介意丢失可移植性(在数据库不可知和使用供应商特定类型方面),但只是想要一个允许我json在普通JPA实体上使用类型作为属性并保留所有它习惯的其他行为(模式生成,合并,持久化,事务代码

postgresql json jpa jdbc eclipselink

14
推荐指数
1
解决办法
6448
查看次数

postgres将字符串插入数字列 - 不会发生自动类型转换

postgres DB test1中有一个表有架构:在此输入图像描述

我们使用spring框架jdbcTemplate来插入数据如下:

Object[] params = {"978","tour"};

jdbcTemplate.update("insert into test1 values (?,?)", params);
Run Code Online (Sandbox Code Playgroud)

但这给出了例外:

org.springframework.jdbc.BadSqlGrammarException:PreparedStatementCallback; 错误的SQL语法[插入test1值(?,?)]; 嵌套异常是org.postgresql.util.PSQLException:错误:列"id"的类型为整数,但表达式的类型为字符变化 ERROR:列"id"的类型为整数但表达式的类型为字符变化

这适用于通过隐式类型转换的Oracle数据库,但postgres似乎不会那样工作.

这可能是postgres驱动程序的问题吗?

解决方法是显式转换:

insert into test1 values (?::numeric ,?)
Run Code Online (Sandbox Code Playgroud)

但是有更好的方法来进行转换,因为这似乎不是一个好的解决方案,因为有很多查询需要修改,而且还可能存在其他类似的转换问题.

是否有一些参数可以在DB级别设置以执行自动转换?

database postgresql casting jdbctemplate

3
推荐指数
1
解决办法
2238
查看次数

标签 统计

postgresql ×3

jpa ×2

json ×2

casting ×1

database ×1

eclipselink ×1

hibernate ×1

java ×1

jdbc ×1

jdbctemplate ×1