0

これら 2 つのコード スニペットの違いは何ですか。基本的に、最初のコードでこれら 2 つのコード スニペットについて混乱がありますcreate。トランザクションを開始してからコミットすることでアクションを実行しています。2 番目のスニペットでは、session.beginTransaction() and tx.commit()どちらが最善のアプローチとその理由

もう一問select query も取引とみなされますか?またはトランザクションは、1 つの作業単位で作成更新や削除などの一連の複数のアクションですか?

public boolean createProject(EmployeeProject employeeProject) {
        Transaction tx = null;
        boolean flag = false;
        try {
            tx = session.beginTransaction();
            session.save(employeeProject);
            tx.commit();
            flag = true;
        } catch (HibernateException e) {
            if (tx != null)
                tx.rollback();

        }
        return flag;
    }

2番目のアプローチ

public boolean createProject(EmployeeProject employeeProject) {
        boolean flag ;
        try {
            session.save(employeeProject);
            flag = true;
        } catch (HibernateException e) {
            flag=false;

        }
        return flag;
    }
4

1 に答える 1

1

定義に従って:

トランザクションはセッションに関連付けられており、通常、Session.beginTransaction() への呼び出しによってインスタンス化されます。セッションの概念 (アプリケーションとデータストア間の会話) はトランザクションの概念よりも粒度が粗いため、1 つのセッションが複数のトランザクションにまたがる場合があります。ただし、特定のセッションに関連付けられているコミットされていないトランザクションは常に 1 つだけであることが意図されています。

WRITE 操作 (insert-update-delete) を実行しているため、2 番目の方法ではオブジェクトを db に永続化することはできません。データベースにオブジェクトを永続化するには、トランザクションを開始してコミットする必要があります。

2 番目のアプローチは、READ 操作 (SELECT クエリなど) にのみ適しています。

于 2013-02-14T13:14:16.603 に答える