休眠多级事务
Posted
技术标签:
【中文标题】休眠多级事务【英文标题】:Hibernate multi level of transaction 【发布时间】:2010-11-14 02:33:58 【问题描述】:我有一些休眠代码,我希望我的代码在 1 个事务中运行 让我用代码解释一下
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 执行此操作?
【问题讨论】:
【参考方案1】:DAO 不应该根据您发现的原因来处理事务:它们不知道自己何时是更大事务的一部分。
如果您使用Spring 声明式事务,您将拥有一个服务层,该服务层将为两个 DAO 创建事务上下文并处理所有事情。我会建议做类似的事情。
更新:我添加了一个指向 Spring 的链接。
【讨论】:
Tanx 但我不知道 Spring 声明性事务到底是什么,我必须阅读有关此方法的信息。 我很好奇 - 你认为 DAO 在完成部分工作时(急切地)刷新休眠会话是否可以,还是应该等待事务结束? 我会等待交易结束。【参考方案2】:请看:Chapter 11. Transactions and Concurrency
【讨论】:
我想要快速回答的人,我自己知道可以从这个网站阅读【参考方案3】:如果我在changeBranch(Branch branch)
中新建会话并将此会话作为参数传递给我的 DAO,我发现我应该如何解决我的问题
【讨论】:
以上是关于休眠多级事务的主要内容,如果未能解决你的问题,请参考以下文章