К вашему вопросу ... обеспечить сброс данных именно тогда, когда метод завершится ? Нет, не точно , когда метод заканчивается, но последний , когда метод заканчивается.
В транзакции вы можете сбросить текущее состояние столько раз, сколько пожелаете. Промывка означает, что вы синхронизируете сеанс JPA с базой данных. См. Hibernate doc относительно этого. Промывка не означает, что ваши изменения долговечны;если транзакция откатывается позже, эти изменения будут автоматически отменены. Операция commit выполняет разные шаги, один из которых - обеспечить синхронизацию сеанса JPA (например, Hibernate) с БД и при необходимости вызвать сброс. Если сеанс уже синхронизирован, сброс будет пропущен.
В комментариях вы написали, что класс и метод parentMethod
не являются транзакционными и что method1()
и method2()
определены в отдельном классе. ,В том случае, когда вызывается method1()
, начинается новая транзакция. Когда этот метод заканчивается, эта транзакция будет зафиксирована. Любые изменения в базе данных, сделанные этим методом, будут длительными , т.е. независимо от того, что произойдет позже (исключения, откат в других методах), эти изменения останутся в базе данных.
Некоторыеинформацию, относящуюся к вашему делу, можно найти здесь , потому что важно следующее:
- Если эти методы относятся к одному и тому же классу и
- Если вы используете Springсобственный AOP или AspectJ. Кроме того, это зависит от класса, в котором определен ваш
parentMethod
. Если это транзакция, то эти 2 вызова будут выполняться в рамках существующей транзакции, и после принятия 1-го транзакция не будет зафиксирована.