从 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 将这些字段存储为简单文本而不修改模型类。
有没有办法配置 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
接口(我认为)。