ホームページ  >  記事  >  Java  >  Spring Data JPA @Query の更新が機能しないのはなぜですか: EntityManager フラッシュの謎?

Spring Data JPA @Query の更新が機能しないのはなぜですか: EntityManager フラッシュの謎?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-27 07:10:29169ブラウズ

Why Does My Spring Data JPA @Query Update Not Work: The EntityManager Flush Mystery?

Spring Data JPA の更新 @Query が更新されない: フラッシュのジレンマ

Spring Data JPA の更新操作に @Query アノテーションを使用すると、 EntityManager の動作を理解するために重要です。デフォルトでは、EntityManager はデータベースへの変更を自動的にフラッシュしません。これにより、更新が無視されたように見える、予期しない結果が生じる可能性があります。

提供されたコードの場合、管理エンティティに加えられた変更が更新クエリ後にデータベースにフラッシュされなかったため、統合テストは失敗しました。 。この問題を解決するには、clearAutomatically = true オプションを @Modifying アノテーションとともに使用することをお勧めします:

@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, ...);

このオプションを追加すると、更新クエリの実行後に EntityManager が自動的に変更をフラッシュし、これらはデータベースに保存されます。

追加の観察:

  • findByEmail および findByLogin ファインダーの SQL ステートメントに見られる制限 2 句は、データベースです。 WHERE IN クエリで制限句を使用する場合の特定の動作。 Spring Data は、この動作を使用して、派生情報に基づいてクエリを最適化します。
  • MySQL と Java の動作の違いは、異なる JDBC ドライバーまたは接続設定の使用に関連している可能性があります。両方の環境で使用されるドライバーと接続設定の一貫性を確保することが重要です。

以上がSpring Data JPA @Query の更新が機能しないのはなぜですか: EntityManager フラッシュの謎?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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