Пакетное обновление Hibernate java.sql.BatchUpdateException Ora-24813 cab= не отправлять или получать неподдерживаемый большой объект
Я делаю обновление для прокручиваемого результата, и он работает нормально, но через некоторое время результат прокрутки стал возвращать больше результатов, скажем, более 50 записей, и он стал показывать следующее исключение, используя приведенный ниже код.
ScrollableResults serviceScroll = session.createCriteria(SomeService.class).add(Restrictions.in("some values", arraylistofvalues)).scroll();
int count_cursor = 0;
while (serviceScroll.next()) {
SomeService serviceRecord = (SomeService) serviceScroll.get(0);
//some updates here
session.update(CenterServiceRecord);
someEntity test = new someEntity();
someEntity.setStatusDate(new Date());
session.save(someEntity);
session.flush();
if (++count_cursor % 10 == 0) {
session.flush();
session.clear();
}
}
Caused by: java.sql.BatchUpdateException: ORA-24813: cannot send or receive an unsupported LOB
at oracle.jdbc.driver.DatabaseError.throwBatchUpdateException(DatabaseError.java:343)
at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:10656)
at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeBatch(NewProxyPreparedStatement.java:1723)
at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:246)
Как решить эту проблему и почему это произошло?
1 ответ
Решение
Ну, после попытки и повторного запуска изменения кода, которое я сделал, чтобы решить проблему, делаю партию меньше ---> из
%10 до%5
но не знал, почему это произошло, если кто-то знает, пожалуйста, улучшите мой ответ. код стал "рабочей версией"
if (++count_cursor % 5 == 0) {
session.flush();
session.clear();
}