1 回の呼び出しの場合、顧客への挿入session.save(customerObject)
はありません...データベースへのクエリ。Hibernate は id プロパティ (「sequence」または「Increment」ジェネレーター) を設定し、エンティティを永続化コンテキストにバインドします。transaction.commit()
が呼び出されると、永続化コンテキストがデータベースと同期されます。
Q: Hibernate は id プロパティをどこに設定しますか?
Q: パーシスタンス コンテキストは、db と同期する前に、顧客への SQL クエリの挿入をキャッシュしますか? つまり、いつSQLが生成されますか(saveまたはsession.flush/tx.commitの実行中)
編集: https://forum.hibernate.org/viewtopic.php?t=951275&highlight=difference%20persist%20saveから以下を取得しました
persist() は明確に定義されています。一時的なインスタンスを永続化します。ただし、識別子の値が永続インスタンスにすぐに割り当てられるとは限りません。割り当てはフラッシュ時に発生する可能性があります。仕様にはそれが記載されていません。これは、persist() で私が抱えている問題です。
persist() は、トランザクション境界の外で呼び出された場合、INSERT ステートメントを実行しないことも保証します。これは、拡張されたセッション/永続コンテキストを使用した長時間の会話で役立ちます。
persist() のようなメソッドが必要です。
save() は同じことを保証しません。識別子を返します。識別子を取得するために INSERT を実行する必要がある場合 (たとえば、「シーケンス」ではなく「アイデンティティ」ジェネレータ)、この INSERT はすぐに実行されます。またはトランザクション外。これは、拡張されたセッション/永続コンテキストを使用した長時間の会話には適していません。
これはもっと紛らわしい