【问题标题】: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 执行此操作?

【问题讨论】:

    标签: java hibernate transactions dao data-access-object


    【解决方案1】:

    DAO 不应该根据您发现的原因来处理事务:它们不知道自己何时是更大事务的一部分。

    如果您使用Spring 声明式事务,您将拥有一个服务层,该服务层将为两个 DAO 创建事务上下文并处理所有事情。我会建议做类似的事情。

    更新:我添加了一个指向 Spring 的链接。

    【讨论】:

    • Tanx 但我不知道 Spring 声明性事务到底是什么,我必须阅读有关此方法的信息。
    • 我很好奇 - 你认为 DAO 在完成部分工作时(急切地)刷新休眠会话是否可以,还是应该等待事务结束?
    • 我会等待交易结束。
    【解决方案2】:

    【讨论】:

    • 我想要快速回答的人,我自己知道可以从这个网站阅读
    【解决方案3】:

    如果我在changeBranch(Branch branch) 中新建会话并将此会话作为参数传递给我的 DAO,我发现我应该如何解决我的问题

    【讨论】:

      猜你喜欢
      • 2016-03-19
      • 2019-03-16
      • 1970-01-01
      • 2015-08-30
      • 1970-01-01
      • 2011-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多