Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使BLOB在Oracle和PostgreSQL上工作?(hibernate/JPA)_Java_Oracle_Postgresql_Hibernate_Jpa - Fatal编程技术网

Java 如何使BLOB在Oracle和PostgreSQL上工作?(hibernate/JPA)

Java 如何使BLOB在Oracle和PostgreSQL上工作?(hibernate/JPA),java,oracle,postgresql,hibernate,jpa,Java,Oracle,Postgresql,Hibernate,Jpa,我有一个带有BLOB列的实体: @Lob @Column(name = "SRC") private byte[] src; 我的服务器使用两个数据库——Oracle和PostgreSQL。当我如上所述使用Oracle启动服务器时,一切正常。但当我开始使用PostgreSQL时,我得到了一个错误: Caused by: org.hibernate.tool.schema.spi.SchemaManagementException: Schema-validation: wrong column

我有一个带有
BLOB
列的实体:

@Lob
@Column(name = "SRC")
private byte[] src;
我的服务器使用两个数据库——Oracle和PostgreSQL。当我如上所述使用Oracle启动服务器时,一切正常。但当我开始使用PostgreSQL时,我得到了一个错误:

Caused by: org.hibernate.tool.schema.spi.SchemaManagementException: Schema-validation: wrong column type encountered in column [src] in table [catalogs]; found [bytea (Types#BINARY)], but expecting [oid (Types#BLOB)]
之后,我阅读了谷歌的文章和建议,并对其进行了修复:

@Lob
@Type(type="org.hibernate.type.BinaryType")
@Column(name = "SRC")
private byte[] src;
现在,它在Postgres上运行良好,但在Oracle上,我遇到了一个例外:

Caused by: org.hibernate.tool.schema.spi.SchemaManagementException: Schema-validation: wrong column type encountered in column [src] in table [catalogs]; found [blob (Types#BLOB)], but expecting [raw(255) (Types#VARBINARY)]
我应该怎么做才能使它在两个数据库上都工作?


p.S CLOB的类似问题

不幸的是,hibernate实体是特定于db提供者的。

您是否在
数据源
/
JPA配置中为每个数据库使用合适的驱动程序?当然。我有单独的配置文件。驱动程序和
oracle
postgresql
之间存在依赖关系。。尝试将
columnDefinition=“VARBINARY”
属性添加到
@Column
注释中,让我们检查发生了什么。做两种情况:使用和不使用
@Type
注释。这对承诺的数据库独立性没有多大帮助。这在JDBC级别上非常容易处理,所以为什么Hibernate不能做到这一点呢?@a_horse_和_no_name是的,Hibernate本身是独立的。我猜JDBC使得实体类在这里不起作用。您可以编写一个包装器驱动程序,将postgres驱动程序包装为具有类似oracle的行为,以便使用oracle样式的hibernate实体类(反之亦然,将oracle驱动程序包装为具有类似postgres的行为,以便使用postgres样式的hibernate实体类)。