当前位置: 首页 > 面试题库 >

Hibernate,PostgreSQL:列“ x”是oid类型,但表达式是byte类型

羊舌自强
2023-03-14
问题内容

在不同数据库之间进行切换时,关于包含大对象(BLOB)的hibernate映射,我有一个奇怪的问题。

@Lob
private byte[] binaryData;

上面的字段在MySQL和Oracle中创建一个字节数组字段,但是在PostreSQL中,它创建一个oid类型的字段。

现在,当我尝试访问该字段时,它在其他数据库中也能正常工作,但是在PostgreSQL中,它失败并显示以下错误

Column "binaryData" is of type oid but expression is of type bytea.

因此,我试图简单地删除“ @Lob”注释,这将解决PostgreSQL的问题,但是在没有该注释的MySQL中,hibernate创建了一个类型为“
tinyblob”的字段,在我们大多数情况下,该字段很小。而且,由于我们想在一个以上的环境中使用此项目,因此要切换两个不同的映射很烦人。

是否有任何强制PostgreSQL使用bytea而不是oid来使用@Lob注释的字段的注释?或者是否有可能省略@Lob并放置其他内容以强制MySQL像使用@Lob那样分配更大的数据类型?

我什至可以想像有这样的解决方案

if (field is of type oid)
  store it as oid
else if (field is of type bytea)
  store it as bytea
else
  // not storable

和吸气剂一样,如果有办法做到这一点

编辑:

以下声明正在工作。它将列分配为oid,但是使用它的hibernate方式知道如何存储和检索此类字段中的数据

@Lob
@Type(type="org.hibernate.type.PrimitiveByteArrayBlobType")
private byte[] binaryFile;

问题答案:

此字段映射是在其中定义的org.hibernate.dialect.PostgreSQLDialect,可以通过将其子类化并配置您的应用程序以在与postgres一起运行时使用修改后的方言来更改。

子类中的相关咒语可能是

    registerColumnType( Types.BLOB, "bytea" );

在构造函数中html" target="_blank">调用super()



 类似资料:
  • 在我将PostgreSQL 13个数据库列标记更改为jsonb后,执行sql时抛出错误: 在使用mybatis时,我应该如何处理spring boot应用程序中的jsonb?

  • 这是我的实体类,映射到(9.4)中的一个表。我正在尝试将元数据存储为数据库中的类型 这是元数据类: 我使用以下迁移文件添加了列: 在中创建记录时出现此错误:错误:列“metadata”的类型为,但表达式的类型为提示:您需要重写或强制转换表达式。 这是我试图在db中持久化的请求主体: 请帮助如何转换类型为在javaSpring启动应用程序

  • 在Spring Boot的一个项目中,Java8使用hibernate-spatial和PostgresDB 9.4 应用程序属性 (我也尝试了PostgisPG9Dialect) 我的实体有一个属性 如果我用空值保存就可以了,但是如果我放一个值 我有: 在我的数据库中,我可以看到列定义为 我要疯了...为什么它不起作用? 更新(仍然不起作用,我正在收集新信息) 1)我认为问题可能是数据库的创建。

  • 我是爪哇的新手。我不明白为什么会发生这些错误。尝试创建一个数组列表,以便它保存每个对象。我得到的错误是 表达式的类型必须是数组类型,但它解析为数组列表上的行“newbug1[i].setpecies();” 提前致谢

  • 问题内容: 警告让我有些困惑,因为我的Eclipse IDE当前正在将类型自动装箱或自动拆箱的每个表达式旁边写入: 这是我应该做出反应的警告吗?我认为自动装箱是Java语言的功能-但是现在每次使用此功能时,我似乎都会收到警告。 问题答案: 我不认为Eclipse默认情况下不会这样做(我的不是),但是您可以使用“偏好设置”>“ Java”>“编译器”>“错误/警告”>“潜在的编程问题”>“装箱和拆箱

  • 我需要使用SpringDataJPA将实体类的两列映射为postgres中的json。阅读多个stackoverflow post和baeldung post后, 如何使用JPA将MapJSON列映射到Java对象 https://www.baeldung.com/hibernate-persist-json-object 我做了如下配置。但是,我面临错误"ERROR:列"标题"是json类型,但