Обновление в REQUIRES_NEW, затем находящем в другой транзакции, возвращает старые данные. Почему?

Этот вопрос лучше всего описан изображением, я думаю. Я надеюсь, что кто-то может помочь мне.Спасибоalt text

1
задан Glorfindel 25 July 2019 в 01:12
поделиться

2 ответа

Я согласен с Паскалем, если два вызова из EJB1 в той же транзакции, то ясно, что (2) не может видеть изменения, выполненные (1), потому что они были выполнены в другой транзакции (при условии разумной изоляции транзакции уровень, конечно)

1. EJB1 transaction (TX1) starts
2.  EJB1.(1) called
3.   EJB2.update row started => TX1 is suspended and
     a new transaction, TX2, is started
4.   The update is performed
5.   TX2 commits
6.  TX1 is resumed - it can't see changes by TX2 because it's isolated from
    changes performed by other transactions during its "life"
7.  EJB1.(2) invokes EJB2.find row withing the context of TX1 => can't see TX2's changes
8. TX1 commits
1
ответ дан 3 September 2019 в 00:55
поделиться

Я не уверен, что вы предоставили весь контекст, но если (1) и (2) выполняются внутри одной транзакции, я бы сказал, что объект находится в кеше L1, это то, что предлагает вопрос , и что изменения, внесенные в « строка обновления », не видны, потому что они были сделаны внутри другого контекста сохранения (вложенная транзакция), следовательно, необходимо обновить состояние экземпляра из база данных.

1
ответ дан 3 September 2019 в 00:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: