我使用Spring引导与Hibernate,JPA和PostgreSQL。我想大型数据库对象转换为文本内容。以前我在定义我的JPA实体我的长文本@Lob
:
@Lob
String description;
后来我发现,问题经常使用@Lob
的创造和决定,而其更改为:
@Type(type="org.hibernate.type.StringClobType")
String description;
这是在数据库为文本类型表示。不幸的是,现在前面的大对象的参考号(OID的)存储在我的行,而不是实际的内容。例如:
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?
特别感谢@BohuslavBurghardt指着我this答案。为了您的方便:
UPDATE table_name SET column_name = lo_get(cast(column_name as bigint))
我有同样的问题与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。