我使用Spring Boot和Hibernate,JPA和PostgreSQL。我想将数据库大对象转换为文本内容。以前我在我的JPA实体中将我的长文本定义为@Lob
:
@Lob
String description;
然后我发现通常使用@Lob
创建问题并决定将其更改为:
@Type(type="org.hibernate.type.StringClobType")
String description;
在数据库中将其表示为文本类型。不幸的是,现在先前大对象的引用号(oid' s)存储在我的行中而不是实际内容中。例如:
id | description
---------------------
1 | 463784 <- This is a reference to the object rather than the content
而不是:
id | description
---------------------
1 | Once upon a time, in a galaxy...
我的问题是,我们在数据库中有数千行数据,如何编写函数或执行查询以将大对象id替换为存储在大对象中的实际文本内容?
答案 0 :(得分:2)
特别感谢@BohuslavBurghardt指点我this回答。为方便起见:
UPDATE table_name SET column_name = lo_get(cast(column_name as bigint))
答案 1 :(得分:0)
我在Spring,Postgres和JPA(休眠)中也遇到了同样的问题。我有一个如下所示的有效负载字段
@NotBlank
@Column(name = "PAYLOAD")
private String payload;
我想将数据类型更改为文本以支持大数据。因此,我使用@Lob并得到了相同的错误。为了解决这个问题,我首先像下面这样更改了实体中的字段:
@NotBlank
@Column(name = "PAYLOAD")
@Lob
@Type(type = "org.hibernate.type.TextType")
private String payload;
并且因为我在此列中的数据是标量(数字),所以我在Postgres中使用以下命令将其更改为普通文本:
UPDATE MYTABLE SET PAYLOAD = lo_get(cast(PAYLOAD as bigint))
非常感谢@Sipder。