Другие правы в том, что они принимают во внимание, что является обычной практикой в настоящее время.
Но это не очень помогает вам в вашей текущей практике.
Что вам нужно сделать, это создать два новых метода DAO.Такие как CreateGlobalSession и CommitGlobalSession.
То, что они делают, аналогично вашим текущим процедурам создания и принятия.
Разница в том, что они устанавливают "глобальную" переменную сеанса (скорее всего, лучше всего это делать с ThreadLocal).Затем вы изменяете текущие подпрограммы, чтобы они проверяли, существует ли этот глобальный сеанс.Если твое создание обнаруживает глобальный сеанс, то просто верни его.Если ваш коммит обнаруживает глобальный сеанс, то он ничего не делает.
Теперь, когда вы хотите использовать его, вы делаете это:
try {
dao.createGlobalSession();
beanA.save();
beanb.save();
Dao.commitGlobalSession();
} finally {
dao.rollbackGlobalSession();
}
Убедитесь, что вы обернули процесс в блок try, такчто вы можете сбросить свой глобальный сеанс в случае ошибки.
Хотя другие методы считаются наилучшей практикой, и в идеале вы могли бы однажды развиться до чего-то подобного, это поможет вам преодолеть горб с чуть более чем 3новые методы и изменение двух существующих методов.После этого остальная часть вашего кода остается прежней.