字符串>使用 hibernate 将 4000 转换为 CLOB

发布于 2024-08-04 14:24:46 字数 1328 浏览 12 评论 0原文

我有一个 java 类,将字符串(> 4k)保存到数据库表中的 CLOB 字段中。 如果字符串小于 4k 则有效。

我使用 @Lob 注释了该字段,最初由于流不支持批处理而出现异常,因此我在 Hibernate 配置中将批处理大小设置为 0,该配置给出了异常:

Caused by: 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 驱动程序是相同的。

欢迎任何答案。

i have a java class persisting a string (>4k) into a database table into a CLOB field.
If the string is less than 4k then it works.

I have the field annotated using @Lob and initially I was getting an exception due to batching not supported for streams so I made the batch size 0 in the Hibernate config which is giving the exception:

Caused by: java.sql.SQLException: ORA-01460: unimplemented or unreasonable conversion requested

  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

I only get this issue when using the code from Grails. When I use the same code from a pure Java application then I don't get the issue. Both applications have the same hibernate config (except I need to set the batch size to 0 in Grails). Is the issue the difference in the Hibernate versions which is 3.2.6ga in Grails as far as I can see and 3.2.5ga for the java application. The Oracle driver is the same in both cases.

Any answers welcome.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

扛起拖把扫天下 2024-08-11 14:24:46

尝试使用 @Column(length = Integer.MAX_VALUE) 注释该字段。这个 hibernate bug 报告提到它在 Derby 中有所帮助。

Try with annotating the field with @Column(length = Integer.MAX_VALUE). This hibernate bug report mentions it helped in Derby.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文