首頁  >  文章  >  Java  >  為什麼我的 Spring Data JPA @Query 更新不起作用:EntityManager 刷新之謎?

為什麼我的 Spring Data JPA @Query 更新不起作用:EntityManager 刷新之謎?

Linda Hamilton
Linda Hamilton原創
2024-10-27 07:10:29245瀏覽

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

Spring Data JPA 更新@Query 不更新:Flush 困境

在Spring Data JPA 中使用@Query 註解更新操作時,對於更新操作時,對於更新操作時,對於理解EntityManager 的行為至關重要。預設情況下,EntityManager 不會自動刷新資料庫的變更。這可能會導致意外結果,其中更新似乎被忽略。

在提供的程式碼的情況下,整合測試失敗,因為在更新查詢後對管理實體所做的變更未刷新到資料庫。要解決此問題,建議使用帶有@Modifying註釋的clearAutomatically = true選項:

@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 語句中看到的limit 2 子句是一個資料庫-在WHERE IN 查詢中使用限制子句時的特定行為。 Spring Data 使用此行為來根據衍生資訊最佳化查詢。
  • MySQL 和 Java 中的行為差異可能與使用不同的 JDBC 驅動程式或連線設定有關。確保在兩種環境中使用的驅動程式和連接設定之間的一致性非常重要。

以上是為什麼我的 Spring Data JPA @Query 更新不起作用:EntityManager 刷新之謎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn