2012-04-01 6 views
0

Hibernateセッションを使用してエンティティを保存し、そのエンティティを次の行の現在のセッションから取得する(つまり、まだ変更がDBに書き込まれていない)オブジェクト?私はそれが何に変更されていることも認識しているので、それはすべきだと思います。Hibernateセッションを理解しようとしています

答えて

0

はい、保存されたエンティティとロード/クエリのビューは一貫している必要があります。クエリーを実行すると、セッションがデフォルトの自動フラッシュモードに設定されていると仮定して、クエリーを実行する前にクエリーを実行すると、データベースへのすべての未処理の変更がフラッシュされます。

さらに、この場合、セッションは、データベース内の同じ行を参照するコピーではなく、保存したものとまったく同じオブジェクトを返す必要があります。

+0

ただし、AbstractAnnotationAwareTransactionalTestsから継承され、トランザクションとしてマークされたJUnitテストではnullを返します – preslavrachev

+0

エンティティの「プロービング」はどうですか?クエリを使用して?それ以前にセッションが自動フラッシュされましたか?クエリヘルプの前にsession.flush()を呼び出すのですか? – araqnid

+0

私は単純に保存し、フラッシュし、次の行のセッションから取得しようとします...そして、INSERT SQLがDBに送られているのを見ても、nullを返します。テストに@Transactionalとマークされている可能性はありますか? – preslavrachev

0

ただし、等号とハッシュコードを実装するときは注意が必要です。セッションは、オブジェクトIDでキーが設定されたエンティティを持つ大きなハッシュマップです。 IDでオブジェクトを取得しようとすると、同じオブジェクトが取得されます。

関連する問題