相关疑难解决方法(0)

Hibernate,Postgresql:列"x"的类型为oid,但表达式的类型为byte

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

@Lob
private byte[] binaryData;
Run Code Online (Sandbox Code Playgroud)

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

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

Column "binaryData" is of type oid but expression is of type bytea.
Run Code Online (Sandbox Code Playgroud)

所以我试着简单地删除"@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
Run Code Online (Sandbox Code Playgroud)

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

编辑:

以下声明正在起作用.它将列分配为oid,但是使用它的hibernate知道如何从这样的字段存储和检索数据

@Lob
@Type(type="org.hibernate.type.PrimitiveByteArrayBlobType")
private byte[] binaryFile;
Run Code Online (Sandbox Code Playgroud)

postgresql annotations hibernate bytearray oid

13
推荐指数
1
解决办法
1万
查看次数

使用JDBC的Postgres UTF-8 clobs

Postgres JDBC驱动程序似乎无法正确处理UTF-8 clobs.当您检索clob时,字符不正确(您获得了非ascii字符的标记).

据说这是一个已知问题:

幸运的是,对于我的应用程序,我通常会避免使用clobs,所以我所做的字段就是真正的大变种.

其他人如何处理这种限制?

java postgresql jdbc clob utf-8

7
推荐指数
2
解决办法
4876
查看次数

标签 统计

postgresql ×2

annotations ×1

bytearray ×1

clob ×1

hibernate ×1

java ×1

jdbc ×1

oid ×1

utf-8 ×1