【问题标题】:Error Saving and getting blob from database SQL oracle从数据库 SQL oracle 保存和获取 blob 时出错
【发布时间】:2014-04-29 16:39:17
【问题描述】:

我正在尝试将 CLOB 保存到数据库中并恢复它,但我收到了 SQLException:

Caused by: java.sql.SQLException: Lob read/write functions called while another read/write is in progress: getBytes()
 at oracle.jdbc.driver.T4CConnection.getBytes(T4CConnection.java:2427)
 at oracle.sql.BLOB.getBytes(BLOB.java:348)
 at oracle.jdbc.driver.OracleBlobInputStream.needBytes(OracleBlobInputStream.java:181)

我认为问题出在我尝试获取 CLOB 时,因为它仍在保存。 如果 CLOB 很小,它可以正常工作,但当 CLOB 稍大时,它会失败。

对不起我的英语,谢谢

编辑:

注解是:

@Lob
@Column(nullable = false)
private String body;

保存方法

emailRepository.save(email); 

【问题讨论】:

  • 又为什么跟 Spring 或 Hibernate 有关系?
  • 请贴出抛出此异常的代码?
  • 另外,请向我们展示您的带有注释/xml 的实体
  • 注解为@Lob @Column(nullable = false) private String body;

标签: java spring oracle hibernate


【解决方案1】:

设置休眠属性

<property name="hibernate.temp.use_jdbc_metadata_defaults" value="false"/>

为我解决了这个问题。

将 SessionFactory 的 lobCreator 设置为 NonContextualLobCreator 可能是更好的解决方案(尚未尝试)。

但是我不确定是什么导致了这个错误。

【讨论】:

    【解决方案2】:

    我在其中一个项目中遇到了类似的问题,设置

    可更新 = 假

    为我解决了这个问题。

    例子:

    @Lob
    @Column(name = "CONTENT", updatable = false)
    Blob content;
    

    Hibernate 会以某种方式尝试重新保存内容,即使它没有被更改。

    【讨论】:

      猜你喜欢
      • 2018-12-20
      • 1970-01-01
      • 2019-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-08
      相关资源
      最近更新 更多