首頁 > Java > java教程 > 主體

為什麼我的更新語句沒有在 Spring Data JPA 中刷新?

Barbara Streisand
發布: 2024-10-26 13:54:30
原創
600 人瀏覽過

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

更新語句未刷新?

Spring Data JPA 的 @Query 註解允許執行自訂查詢。在提供的程式碼片段中,@Modifying 查詢用於更新管理實體。但是,透過此查詢所做的變更不會持久化到資料庫中。

刷新的作用

預設情況下,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 中刷新?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!