org.hibernate.type.TextType和Oracle

Mat*_*teo 7 postgresql hibernate jpa oracle11g

我们使用Hibernate作为JPA提供程序,我们有一个带有标记的大对象字段的类

@Lob
@Type( type = "org.hibernate.type.TextType" )
private String someString;
Run Code Online (Sandbox Code Playgroud)

该列创建为

SOMESTRING            LONG()             
Run Code Online (Sandbox Code Playgroud)

这与PostgreSQL和MySQL完美配合.使用Oracle时持久化对象

entityManager.persist( object );
Run Code Online (Sandbox Code Playgroud)

我们得到一个org.hibernate.exception.GenericJDBCException: Could not execute JDBC batch update例外.

删除@Type( type = "org.hibernate.type.TextType" )注释将解决Oracle的问题,但会引入PostgreSQL的编码问题,如使用Hibernate/PostgreSQL无法将Euro-sign存储到LOB字符串属性中所述

我想知道如何定义一个大文本字段,以便out程序可以在PostgreSQL和Oracle上运行.纯JPA解决方案是最佳的,但Hibernate特定的解决方案也是如此.

编辑:

真正的例外:

java.sql.BatchUpdateException: ORA-22295: cannot bind more than 4000 bytes data to LOB and LONG columns in 1 statement
Run Code Online (Sandbox Code Playgroud)

现在,我错过的例外解释了问题,实际上我持久化的对象比大字符串(至少一个长DBID)更多.

min*_*das 2

我遇到了类似的问题,唯一的方法是扩展/自定义 Oracle 方言。