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.