如何防止 Hibernate 6.4 将 @Column(columnDefinition = 'text') 字段存储为 PostgreSQL 中的大对象 (LOB)?

问题描述 投票:0回答:1

从 Hibernate 5.6 更新到 6.4 后,我注意到用

@Column(columnDefinition = "text")
注释的字段现在存储为 PostgreSQL 中大对象的引用。 Hibernate 使用 pg_largeobject 和 pg_largeobject_metadata 表,而不是将数据作为文本直接存储在表中。

受影响的字段是实现Externalized的类型,这些字段中存储的数据是JSON。以前,这些字段只是作为文本列存储在数据库中,而不涉及大对象存储。

有没有办法配置 Hibernate 6.4 将这些字段直接存储在文本列中,而不使用大对象存储,也不修改模型类?

这是我的一个实体中的匿名示例字段:

@Column(columnDefinition = "text")
private MyExternalizableType jsonData;

其中 MyExternalizedType 实现了Externalized。

任何有关如何解决此问题的指导将不胜感激!

在 Hibernate 5.6 中,这些字段直接以文本形式存储在数据库中,我希望在 Hibernate 6.4 中继续这样做。然而,更新后,Hibernate 开始将它们存储为 pg_largeobject 和 pg_largeobject_metadata 表中大对象的引用,而不是作为表本身的纯文本。

我已经审查了模型和配置,但我还没有找到一种方法来强制 Hibernate 6.4 将这些字段存储为简单文本而不修改模型类。

json spring postgresql hibernate jpa
1个回答
0
投票

有没有办法配置 Hibernate 6.4 将这些字段直接存储在文本列中,而不使用大对象存储。

最简单的方法,如果你想将这个

MyExternalizableType
转换为
json|jsonb|text
进行存储。 就是使用
io.hypersistence:hypersistence-utils-hibernate-xx
库。

注意:io.hypersistence:hypersistence-utils-hibernate-63 和 hibernate-core:6.4。

@Column(name = "json_data", columnDefinition = "text")
@Type(JsonType.class) // import io.hypersistence.utils.hibernate.type.json.JsonType;
private MyExternalizableType jsonData;


并且不修改模型类?

在这种情况下可能不需要

Externalizable
接口(我认为)。

© www.soinside.com 2019 - 2024. All rights reserved.