Hibernate многоуровневая транзакция

У меня есть код гибернации, и я хочу, чтобы мой код выполнялся в одной транзакции, позвольте мне объяснить в коде

public void changeBranch(Branch branch) throws DatabaseException {
//some code
            humanDao.update(he);
            superBranchUsername = branch.getFatherUsername();
            int superBranchId = branchDao.getBranchIdByUserName(superBranchUsername);
            BranchEntity superBranch = branchDao.load(superBranchId);
            BranchEntity be = new BranchEntity();
            setBranchEntity(be, he, pkId, bname, confirmed, level, studentCount, uname, superBranch);
            branchDao.update(be);   // update kardane jadvale Branch va Set kardane Human motenazer be on
//some code
}

И то и другое humanDao.update(he); а также branchDao.update(be); My GenericDAO запустит в дескрипторе транзакции, что humanDao и branchDao наследуются от него но я хочу, чтобы этот блок кода (написанный выше) также выполнялся в транзакции!! Как я могу добраться до Hibernate, чтобы сделать это?

3 ответа

Решение

Я нахожу, как это исправить, если я новую сессию в changeBranch(Branch branch) и передать этот сеанс в качестве параметра моего DAO, моя проблема решена

DAO не должны обрабатывать транзакции именно по той причине, которую вы обнаружили: они не могут знать, когда они являются частью более крупной транзакции.

Если бы вы использовали декларативные транзакции Spring, у вас был бы сервисный уровень, который создавал бы контекст транзакции как для DAO, так и занимался бы всем. Я бы порекомендовал сделать что-то подобное.

ОБНОВЛЕНИЕ: я добавил ссылку на Spring.

Пожалуйста, смотрите: Глава 11. Транзакции и параллелизм

Другие вопросы по тегам