Я пытаюсь сохранить 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);
Установка свойства спящего режима
<property name="hibernate.temp.use_jdbc_metadata_defaults" value="false"/>
сорвал проблему для меня.
Настройка lobCreator для SessionFactory для NonContextualLobCreator, вероятно, является лучшим решением (еще не проверено).
Однако я не уверен, что вызывает эту ошибку.
Я столкнулся с аналогичной проблемой в одном из проектов, установив
updatable = false
исправил проблему для меня.
Пример:
@Lob
@Column(name = "CONTENT", updatable = false)
Blob content;
Hibernate каким-то образом пытается повторно сохранить контент, даже если он не был изменен.