Я написал довольно сложный механизм, который перемещается вверх и вниз по большой серии объектов, считываемых из базы данных.
Итак, у меня есть код, который выглядит примерно так:
public void go(long id) {
try {
beginTransaction();
Foo foo = someDao.find(id);
anotherObject.doSomething(foo);
commitTransaction();
} catch (Exception e) {
rollbackTransaction();
}
}
Код в doSomething (...) будет вызывать методы для получения дочерних объектов Foo и передачи этих дочерних объектов другим классам и т. Д.
До моей проблемы это была просто длинная транзакция только для чтения. Однако теперь, где-то в середине всего этого, должно быть обновление базы данных. Важно, чтобы это обновление было зафиксировано сразу. Поскольку Hibernate не поддерживает вложенные транзакции, как бы я справился с такой ситуацией, чтобы позволить мне продолжать передавать свой объект и по-прежнему вызывать методы getter для доступа к дочерним элементам, пока выполняется обновление этого базы данных?
Я думал об удалении длительной транзакции и наличии небольших транзакций повсюду. К сожалению, мой код в данный момент пропускает Foo и другие дочерние объекты везде, предполагая, что он все еще привязан к сеансу. Если это мое единственное решение, будет ли это означать, что я буду в конечном итоге получать ужасные вызовы слияния везде, чтобы просто повторно присоединиться к сеансу, чтобы методы получения работали снова? Я уверен, что должно быть более элегантное решение.