0

以下のコードでは:

SessionFactory sessionFactory = new Configuration().configure("student.cfg.xml").buildSessionFactory();
    Session session = sessionFactory.openSession();
    //Transaction tran = session.beginTransaction();
    session.save(student);
    //tran.commit();
    session.flush();
    session.close();

トランザクションをコメント化/コメント解除するかどうかに関係なく、正常に機能します。つまり、トランザクションがなくても、保存操作は正常に実行されます。しかし、私がドキュメントをチェックすると、挿入、更新、削除の前に常にトランザクションを使用します。同じ理由はありますか?私は何かが足りないのですか?

これについて教えてください。私はかなり混乱しています:(

よろしく、

4

3 に答える 3

1

常に自動コミットを使用すると、データベースに損害を与える可能性があります。一度にたくさんの作業をコミットしたいとします。この状況では、すべてのジョブを完了した後、トランザクションを作成し、すべての作業をコミットする必要があります。たとえば、アトミックな作業のために多くのデータベースアクセスを行う必要があります。その場合、トランザクション内のすべての作業を実行し、すべての作業をコミットする必要があります。

Session session = factory.openSession();
Transaction tx = session.beginTransaction();

// do some work
tx.commit();

もちろん、キャッチブロックもあります。

于 2012-11-03T16:05:57.130 に答える
1

これを読む 記事はJBOSSからのものです

トランザクションを使用しない場合(アトミック操作が必要ない場合は、ある時点で必要になる可能性があります)、db関連の操作がデータベースにヒットすると私は信じています。それはシステムを狂わせるのを遅くします。トランザクションを実行する場合、hibernateはdbを1回ヒットすることにより、同じトランザクション内のすべての操作を実行します。ある時点で、どこかでそれを前に読んだ。

于 2012-11-03T16:35:02.660 に答える
0

hibernateの非選択クエリは複数のクエリを実行している(または複数の操作を使用している)と思います。そのため、それらを実行するにはトランザクションが必要です。

于 2013-09-04T06:16:55.680 に答える