2017-01-01 4 views
1

の外:休止 - 下のリンクから取引

save()メソッドは、それが識別子を返し、識別子を取得するために実行するINSERTをしている場合は、同じことを保証するものではありません(たとえば、「アイデンティティ"ジェネレータ)では、トランザクションの内部または外部に関係なく、このINSERTがただちに実行されます。

http://javarevisited.blogspot.com/2012/09/difference-hibernate-save-vs-persist-and-saveOrUpdate.html

私はこの疑問を持っている:どのようにそれがトランザクションの外にある場合でも、すぐに挿入する方法を保存することができますか?挿入が行われると、データベースにアクセスしていることを意味し、トランザクションなしでデータベース操作を行うことができるためです。 AFAIKトランザクションの最小細分性は、挿入/更新/選択/削除の単一ステートメントです。だから私は明確化が必要です。

答えて

0

エンティティがデータベースから取得されると、エンティティはセッションにアタッチされ、セッション(およびそのトランザクション)が終了するまで セッションの一部として残ります。同様に、エンティティが追加または更新されるときに が変更されると、それらの変更もセッションに添付され、 エンティティがデータベースから削除されると、セッションから削除されます。

ただし、あなたの声明(またはあなたが提供したリンク)は真です。

Hibernate save()canエンティティをデータベースに保存するために使用します。トランザクション外でこのメソッドを呼び出すことができます。これをトランザクションなしで使用し、エンティティ間をカスケードすると、セッションをフラッシュしない限り、プライマリエンティティのみが保存されます。

あなたは作業例hereを見つけることができます。