从数据库SQL oracle保存并获取blob时出错

时间:2014-04-29 16:39:18

标签: java spring oracle hibernate

我正在尝试将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); 

2 个答案:

答案 0 :(得分:1)

设置hibernate属性

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

为我解决了这个问题。

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

但我不确定导致此错误的原因。

答案 1 :(得分:0)

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

  

updatable = false

为我解决了这个问题。

示例:

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

Hibernate试图重新保存内容,即使它没有被更改。