簡體   English   中英

在 JPA 中更新實體的最佳方法是什么

[英]What is the best way to update the entity in JPA

我正在使用 JPA 進行一些 CRUD 操作。 更新對象的正確方法是什么?

通過更新查詢還是通過EntityManagerfind方法?
我有一個Employee對象需要更新。 哪個是正確的方法?

請指導我。

Query API 上使用executeUpdate()更快,因為它繞過了持久上下文。然而,繞過持久上下文會導致內存中的實例狀態和數據庫中該記錄的實際值不同步。

考慮以下示例:

 Employee employee= (Employee)entityManager.find(Employee.class , 1);
 entityManager
     .createQuery("update Employee set name = \'xxxx\' where id=1")
     .executeUpdate();

刷新后,DB 中的名稱更新為新值,但內存中的employee 實例仍保留原始值。您必須調用entityManager.refresh(employee)將更新的名稱從DB 重新加載到employee 實例。如果您的代碼在刷新后仍然必須操作員工實例,但您忘記 refresh() 員工實例,因為員工實例仍包含原始值,這聽起來很奇怪。

通常, executeUpdate()用於批量更新過程,因為它會繞過持久上下文,因此速度更快

更新實體的正確方法是,您只需通過 setter 設置要更新的屬性,並讓 JPA 在刷新期間為您生成更新 SQL,而不是手動編寫。

   Employee employee= (Employee)entityManager.find(Employee.class ,1);
   employee.setName("Updated Name");

這取決於您想要做什么,但正如您所說,使用find()獲取實體引用然后僅更新該實體是最簡單的方法。

除非您有強烈的跡象表明這確實很重要,否則我不會理會各種方法的性能差異。

這取決於將要更新的實體數量,如果您有大量實體使用 JPA 查詢更新語句會更好,因為您不必從數據庫加載所有實體,如果您只想更新一個實體,則使用查找和更新沒問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM