0

私は休止状態のチュートリアルを行っていましたが、すべてのダオでセッションを取得し、トランザクションを開始する必要があることに気付きました.すべての操作を実行してからコミットします

private void createAndStoreEvent(String title, Date theDate) {
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();

        //Perform operations...

        session.getTransaction().commit();
    } 

次に、休止状態を使用するAppfuseというフレームワークに、以下に示すようにdaoメソッドがあることに気付きました.begintransactionとcommitが表示されません

    public List<Person> findByLastName(String lastName) {
    //begintransaction
        return getHibernateTemplate().find("from Person where lastName=?", lastName);
    //Commit
    }

appfuse が session.beginTransaction() と session.getTransaction().commit(); で dao 操作をどのようにまとめているのだろうか。

この手法を使用することで、プログラマーはハイバネート トランザクションのことを気にする必要がなくなります。dao メソッドがオーバーライドされた場合でも、トランザクション ラッパー コードが自動的に来るような方法が必要です。dao をデコレータ クラスに渡し、dao メソッド呼び出しをデコレータ クラス内にラップしようとしましたが、dao インターフェース メソッドが変更されるため、アイデアがうまくいきませんでした。

4

2 に答える 2

1

AppFuse がどのようにそれを行っているかはわかりませんが、アプリケーションのサービス層にトランザクション管理を導入する非常に一般的な方法は、アスペクト指向プログラミングを使用することです。Spring Framework を使用している場合は、これ(マニュアルから) が参考になります。

于 2011-06-08T13:03:09.400 に答える
1

HibernateTemplate春の一部です。詳細については、このリンクを参照してください。しかし、Spring 3.0 以降では、宣言型トランザクション管理を支持して非推奨と見なされています。

于 2011-06-08T13:03:43.733 に答える