Update Statements Not Flushing?
Spring Data JPA の @Query アノテーションを使用すると、カスタム クエリを実行できます。提供されたコード スニペットでは、@Modifying クエリを使用して Admin エンティティを更新します。ただし、このクエリを通じて行われた変更はデータベースに永続化されません。
フラッシュの役割
デフォルトでは、EntityManager は変更を自動的にフラッシュしません。これは、@Modifying クエリを通じて行われた変更は EntityManager のローカル キャッシュにのみ反映されますが、EntityManager が明示的にフラッシュされるまでデータベースには保持されないことを意味します。
解決策: 強制フラッシュ
@Modifying クエリを通じて行われた変更がデータベースに確実に保持されるようにするには、clearAutomatically = true オプションを @Modifying アノテーションに追加します。これにより、各書き込み操作の後に EntityManager が変更を自動的にフラッシュし、データベースがすぐに更新されるようになります。
変更されたクエリ:
<code class="java">@Modifying(clearAutomatically = true) @Transactional @Query("UPDATE Admin SET firstname = :firstname, lastname = :lastname, login = :login, superAdmin = :superAdmin, preferenceAdmin = :preferenceAdmin, address = :address, zipCode = :zipCode, city = :city, country = :country, email = :email, profile = :profile, postLoginUrl = :postLoginUrl WHERE id = :id") public void update(@Param("firstname") String firstname, @Param("lastname") String lastname, @Param("login") String login, @Param("superAdmin") boolean superAdmin, @Param("preferenceAdmin") boolean preferenceAdmin, @Param("address") String address, @Param("zipCode") String zipCode, @Param("city") String city, @Param("country") String country, @Param("email") String email, @Param("profile") String profile, @Param("postLoginUrl") String postLoginUrl, @Param("id") Long id);</code>
追加考慮事項:
以上がSpring Data JPA で Update ステートメントがフラッシュされないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。