我正在尝试将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);
答案 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试图重新保存内容,即使它没有被更改。