У меня есть два объекта: Message
и Session
. Message
имеет отношение @ManyToOne
к Session
.проблема изоляции транзакций с пружинными данными
У меня есть хранилище и действие Spring Data A:
@Query("select c from Messages c where c.session.mode=0 and c.field=5")
List<Messages> findMessages();
Затем я обрабатываю найдено данных
messages.ForEach(message->{
Session session = message.getSession();
sessionClose(session);
newSessionOpen();
})
и в другом классе обслуживания я имею
Session session=findOpenedSession();
Вопрос заключается в :
Что делать, если действие А в транзакции и после ее запуска и до ее окончания другая служба запросит открытый Session
или попытается вставить запись в таблицу Message
?
Другими словами, мы имеем:
- Сделка начинается
- записи считываются
Session
экземпляры обрабатываются в цикле -Session
с использованиемsessionClose
иnewSessionOpen
- сделка заканчивается
Что делать, если какой-либо другой процесс запросит открытый Session
между 2 и 4 или 2 и 3 или где-нибудь внутри? Итак, который открыл Session
, он будет читать? Старый или новый? Я использую postgres и @Transactional
Весенняя аннотация.
Вы полностью смутили меня. Когда вы говорите сеанс, вы имеете в виду объект jpa, который вы создали, или сеанс спящего режима? Или, может быть, иногда один, а иногда и другой? –