1

文字列(> 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ドライバはどちらの場合も同じです。

どんな答えでも歓迎します。

4

1 に答える 1

1

でフィールドに注釈を付けてみてください@Column(length = Integer.MAX_VALUE)。This hibernate bug reportは、Derby で役に立ったと述べています。

于 2009-09-18T02:11:16.457 に答える