我有一个java类将字符串(> 4k)持久化到数据库表中的CLOB字段中。如果字符串小于 4k,那么它可以工作。
我使用 @Lob 注释了该字段,最初由于流不支持批处理而出现异常,因此我在 Hibernate 配置中将批处理大小设置为 0,这给出了异常:
引起:java.sql.SQLException: ORA-01460: 未实现或不合理的转换请求
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:289)
at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:582)
at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1986)
at oracle.jdbc.ttc7.TTC7Protocol.parseExecuteFetch(TTC7Protocol.java:1144)
at oracle.jdbc.driver.OracleStatement.executeNonQuery(OracleStatement.java:2152)
at oracle.jdbc.driver.OracleStatement.doExecuteOther(OracleStatement.java:2035)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:2876)
at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:609)
at org.hibernate.jdbc.NonBatchingBatcher.addToBatch(NonBatchingBatcher.java:23)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2062)
... 36 more
我只有在使用 Grails 的代码时才会遇到这个问题。当我在纯 Java 应用程序中使用相同的代码时,我不会遇到问题。两个应用程序具有相同的休眠配置(除了我需要在 Grails 中将批处理大小设置为 0)。问题是 Hibernate 版本的差异,据我所知,Grails 中的 3.2.6ga 和 java 应用程序的 3.2.5ga。在这两种情况下,Oracle 驱动程序是相同的。
欢迎任何答案。