Hibernate envers 与 postgresql 将字节数组视为 bytea 类型,但我希望它是 oid

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

将 tot spring 3 和 hibernate core/envers 升级到 6.* 后,会出现此问题。

  • Spring Boot版本3.1.4
  • Hibernate核心和envers版本6.2.5.Final(尝试过不同版本)
  • PostgreSQL jdbc驱动程序版本42.6.0(尝试过不同版本)

我有一个带有列的实体;

@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 错误?

spring postgresql hibernate hibernate-envers
2个回答
0
投票

也许你可以添加注释

@洛布 @JdbcTypeCode(类型.BINARY) 私有字节[]内容;

另一方面,该映射取决于您使用的 org.hibernate.dialect.PostgreSQLDialect 及其版本。 您可以找到答案:Hibernate,Postgresql:列“x”的类型为 oid,但表达式的类型为 byte


0
投票

我设法通过创建自定义转换器来解决此问题

  @Converter
  public class ContentConverter implements AttributeConverter<byte[], Blob> {

  //code

  }

并将注释添加到字段中;

  @Lob
  @Convert(converter = ContentConverter.class)
  private byte[] content;
© www.soinside.com 2019 - 2024. All rights reserved.