簡體   English   中英

在 Spring 數據 JPA 中更新時,具有 WHERE 子句的自定義更新查詢是否會提供更高的性能?

[英]Does having a custom update query with WHERE clause gives more performance while updating in Spring Data JPA?

假設我有一個名為 Car 的實體。 現在實體的主鍵不是自動生成的 Id。 假設我需要用一組值更新我的汽車實體。但問題是我需要確保給定的 ID 已經存在於數據庫中。 因為我知道在 spring 數據 JPA 中,我們使用save()方法來保存和更新現有實體。

然后,在為save()方法插入新主鍵的情況下,將導致保存,否則它將更新該特定實體。因此,我始終需要確保在更新期間該方法不會為無效 ID 創建新實體。

因此,為了克服這個問題,我看到許多開發人員在更新之前使用find()方法調用來確保給定的主鍵已經存在。但是您可以看到會有額外的數據庫命中來確保這一點。

因此,為了克服這個問題,我想到了使用自定義更新查詢。然后我可以通過在 JPARepository 中將它的返回類型聲明為 int 來確定查詢是否被執行。 所以根據我的知識查詢將 output 1 表示成功,0 表示更新失敗。

所以我需要知道的是,在為方法updateCar()提供不存在的主鍵的情況下,我是否可以始終確保更新不會因為主鍵無效而成功。 我的意思是如果更新由於不同的錯誤而失敗會發生什么?

本次討論的最終目的是避免在更新前檢查主鍵是否存在。 所以如果有更好的方法請state吧。

前任:

    @Modifying
    @Query("UPDATE Car c SET c.status =:status WHERE c.id =:id")
    int updateCar(@Param("status") String status, @Param("id") String id);

您從更新中返回的 int 是更新的行數。

所以我需要知道的是,在為方法 updateCar() 提供不存在的主鍵的情況下,我是否可以始終確保更新不會因為主鍵無效而成功。 我的意思是如果更新由於不同的錯誤而失敗會發生什么?

如果由於任何其他原因更新失敗,那么您將收到異常。

您的解決方案的問題是您必須為每個用例編寫更新語句。

暫無
暫無

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

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