文字列(> 4k)をデータベーステーブルのCLOBフィールドに永続化するJavaクラスがあります。文字列が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ドライバはどちらの場合も同じです。
どんな答えでも歓迎します。