ホームページ  >  記事  >  Java  >  Spring Data JPA @Query の更新がデータベースに反映されないのはなぜですか?

Spring Data JPA @Query の更新がデータベースに反映されないのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-25 12:34:30259ブラウズ

Why is my Spring Data JPA @Query Update Not Reflecting in the Database?

Spring Data JPA Update @Query not Updating?

Spring Data JPA では、@Query アノテーションを使用してカスタム JPQL またはネイティブを定義できます。データベース行を変更するための SQL クエリ。ただし、@Modifying アノテーションだけでは、データベースの更新に必要なフラッシュおよび永続化操作がトリガーされない可能性があります。

変更をデータベースに確実に永続化するには、@Modifying アノテーション内で clearAutomatically 属性を使用することをお勧めします。この属性は、クエリの実行後に永続コンテキストを自動的にクリアするかどうかを決定します。 clearAutomatically を true に設定すると、クエリの実行中に行われた変更が自動的に検出され、データベースにフラッシュされます。

@Modifying クエリで clearAutomatically を使用する方法の例を次に示します。

@Modifying(clearAutomatically = true)
@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);

clearAutomatically を true に設定すると、更新クエリの実行後に永続コンテキストがクリアされます。これにより、Admin オブジェクトに加えられた変更がデータベースに強制的に永続化されます。

clearAutomatically は、現在の EntityManager に関連付けられた永続化コンテキストにのみ影響することに注意してください。複数の永続コンテキストを使用している場合は、すべての永続コンテキスト間で変更が適切に同期されるように、フラッシュを手動で管理する必要がある場合があります。

以上がSpring Data JPA @Query の更新がデータベースに反映されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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