将 tot spring 3 和 hibernate core/envers 升级到 6.* 后,会出现此问题。
我有一个带有列的实体;
@Lob
private byte[] content;
我的数据库表有一个名为 content 的列,类型为 oid。
由于我使用 envers,我还有一个 _aud 表,其中有一列名为“content”,类型为 oid。
启动架构验证时出现以下错误;
Schema-validation: wrong column type encountered in column [content] in table [xxxxx_aud]; found [oid (Types#BIGINT)], but expecting [bytea (Types#VARBINARY)]
如果我将 @NotAudited 添加到此字段,它就会起作用,因此我的普通表适用于 OID 类型。 我希望我的 hibernate envers 专栏也能是 OID,但需要 bytea。
我需要将我的 _aud 表列内容转换为 bytea 还是这是一个 hibernate envers 错误?
也许你可以添加注释
@洛布 @JdbcTypeCode(类型.BINARY) 私有字节[]内容;
另一方面,该映射取决于您使用的 org.hibernate.dialect.PostgreSQLDialect 及其版本。 您可以找到答案:Hibernate,Postgresql:列“x”的类型为 oid,但表达式的类型为 byte
我设法通过创建自定义转换器来解决此问题
@Converter
public class ContentConverter implements AttributeConverter<byte[], Blob> {
//code
}
并将注释添加到字段中;
@Lob
@Convert(converter = ContentConverter.class)
private byte[] content;