2017-02-21 3 views
1

私は次のコードを持っている:なぜデータはsession.setFlushMode(FlushMode.MANUAL)の後にデータベースに格納されますか。 session.save(); (休止状態)

Color color = new Color(null,"B12",null,1); 

    Session session=sessionFactory.openSession(); 
    session.setFlushMode(FlushMode.MANUAL); 

    session.beginTransaction(); 
    session.save(color); 
    session.clear(); 

    session.getTransaction().commit(); 

    session.close(); 

    sessionFactory.close(); 
私はフラッシュが手動で指定されたときに、データがデータベースに保存されている理由

私はちょうどそれを得ることはありませんか?私はそれを把握するのを助けてください!

答えて

1

理由はsession.getTransaction()です。commit()はすべての変更をデータベースに保存します。このstackoverflowの記事を参照してください。

HIbernate commit() and flush()

フラッシュをコミットする前にデータベースにアイテムをプッシュするために使用されています。

+0

Christian Bauer、Gavin Kingの本を読みました。「FlushMode.MANUALを選択すると、 を指定すると、flush()結果を明示的に呼び出すように指定することができます同期して、データベースとの管理状態の "。そして、私のコード例では、明示的にflush()を呼び出す必要はありません。なぜそれがまだデータベースに保存されているのでしょうか? –

+1

通常、データベースを呼び出すと自動的にフラッシュされます。 Flushmode.MANUALは、引用符付きの文のように動作します。特にコミットとは、変更をデータベースに保存することを意味します。これはそれをよりよく説明しています。http://stackoverflow.com/questions/14622962/what-is-transaction-commit-in-hibernate – darthNater

+0

ありがとうございます、私は理解していますが、まだ少しのクエストを持っていると思います。セッションコードを編集しました。 session.save()の後に()を追加します。ドキュメンテーションは、メソッドclear()について、次のように述べています。「ロードされたすべてのインスタンスを取り除き、すべての保留中のセーブ、更新、削除をキャンセルする」なぜそれはsave()をキャンセルせず、データをデータベースに保存しますか? –