休眠多级事务

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,我发现我应该如何解决我的问题

【讨论】:

以上是关于休眠多级事务的主要内容,如果未能解决你的问题,请参考以下文章

“没有绑定到线程的休眠会话”,事务方法中断下一个事务的执行

为啥在更新事务期间休眠调用删除?

休眠事务和单元测试

事务在休眠中不回滚

视图中的休眠打开会话:每个请求的事务?

如果不在事务中,休眠 session.update 不起作用