私はflush()メソッドに関する情報を収集していましたが、それをいつ使用し、どのように正しく使用するかについては明確ではありません。私が読んだことから、私の理解は、永続化コンテキストの内容がデータベースと同期される、つまり、未解決のステートメントを発行したりエンティティデータを更新したりすることです。
今、私は2つのエンティティA
とB
(1対1の関係で、JPAによって強制またはモデル化されていない)以下のシナリオを取得しました。A
手動で設定される複合PKがあり、自動生成されたIDENTITYフィールドもありますrecordId
。これrecordId
はへB
の外部キーとしてエンティティに書き込む必要がありますA
。私は、1つのトランザクションで保存A
しB
ています。問題は、自動生成された値があることをA.recordId
、私はの明示的な呼び出しを行う場合を除き、トランザクション内では使用できませんem.flush()
呼び出した後em.persist()
にA
。(自動生成されたIDENTITY PKがある場合、値はエンティティで直接更新されますが、ここではそうではありません。)
em.flush()
トランザクション内で使用すると害が生じる可能性がありますか?