ホームページ >Java >&#&チュートリアル >Spring Data JPA で Update ステートメントがフラッシュされないのはなぜですか?

Spring Data JPA で Update ステートメントがフラッシュされないのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-26 13:54:30681ブラウズ

Why Are My Update Statements Not Flushing in Spring Data JPA?

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>

追加考慮事項:

  • トランザクション管理の使用: トランザクションにより、データベースに加えられた変更がアトミックで一貫性のあるものになります。 @Modifying クエリへの呼び出しをトランザクションで囲み、更新が正常に保持されるようにします。
  • Flush メソッドの使用: AndFlush メソッドを使用して、データベースへの変更を明示的にフラッシュすることもできます。このメソッドは、データベースを変更するクエリの実行後に使用できます。

以上がSpring Data JPA で Update ステートメントがフラッシュされないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。