0

いくつかの休止状態のコードがあり、コードを 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);humanDao と branchDao が継承されている My GenericDAO によってトランザクション ハンドルで実行されます。しかし、私はこのコードブロック (上で書いたもの) もトランザクションで実行したいのです!! これを行うためにHibernateにアクセスするにはどうすればよいですか?

4

3 に答える 3

2

DAO は、あなたが発見した正確な理由でトランザクションを処理するべきではありません: DAO は、より大きなトランザクションの一部であることを知ることができません。

Spring宣言型トランザクションを使用していた場合、両方の DAO のトランザクション コンテキストを作成し、すべてを処理するサービス レイヤーが必要になります。そのようなことをすることをお勧めします。

更新: Spring へのリンクを追加しました。

于 2009-07-26T14:31:02.100 に答える
1

参照してください:第 11 章トランザクションと同時実行性

于 2009-07-26T07:13:02.387 に答える
0

新しいセッションを開始し、このセッションをパラメータとしてDAOに渡す場合、どのように修正すればよいかがわかります changeBranch(Branch branch)。問題は解決しました。

于 2009-07-28T07:59:43.690 に答える