hibernate session actionqueue clear


https://stackoverflow.com/questions/27755461/why-is-hibernate-batching-order-inserts-order-updates-disabled-by-default

flush() следует применять только в тех случаях когда необходимо получать сохраненную версию объекта перед заверщением транзакции.

clear() очищает hibernate сессию

session.load update saveOrUpdate persist delete наполняют сессию различными обхектами в кеш 1го уровня. в actionQueue добавляются сущности для обработки при session.flush().
при закрытии сессии кеш 1го уровня очищается.
int i=0;
for(<1000 p="">i++;
final Object entity = session.load(name,oid);
session.delete(entity);
if(i%20 ==0){
session.flush();
session.clear();
}
}
<1000 p="">
<1000 p="">
<1000 p="">
<1000 p="">************ lazy fields
поля lazy работают только в рамках сессии - если сессию закрыли session.close() то lazyInitException.

если используется @transactional то границами сессии управляет спринг.
rppagation = required или required_new границей сессии будет метод под @Transactional
после выхода из метода сессия закроется и все объекты сессии станут недоступны.

сессия будет только на самом верхнем уровне стека вызовов - самый верхний обозначенный @Transactional

заход в @Transactional метод забирает коннект из пула!

после выхода из @transactional метода будет вызван hibernate.flush() чтобы все изменения над объектами сохранить в бд. если поставить в @Transactional(readOnly = true ) то hibernate.flush() не вызовет. если есть вложенные @transactional то вся вложенная транзакция станет readOnly!

Комментарии

Популярные сообщения из этого блога

kafka конспект однако

Дэвид Рок: Ваш мозг на работе - Разговоры в Гугле

Отслеживание Процесса загрузки с PHP и JavaScript