我们使用 Hibernate 作为 JPA 提供者,并且我们有一个带有标记为大对象字段的类
@Lob
@Type( type = "org.hibernate.type.TextType" )
private String someString;
该列创建为
SOMESTRING LONG()
这与 PostgreSQL 和 MySQL 完美配合。持久化对象时使用 Oracle
entityManager.persist( object );
我们得到一个org.hibernate.exception.GenericJDBCException: Could not execute JDBC batch update
例外。
删除@Type( type = "org.hibernate.type.TextType" )
注释将解决 Oracle 的问题,但会引入 PostgreSQL 的编码问题,如使用 Hibernate/PostgreSQL 无法将欧洲符号存储到 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
现在,我错过的异常解释了问题,实际上我坚持的对象比大字符串(至少一个长 DBID)还要多。