簡體   English   中英

Java Repository 無法實現方法

[英]Java Repository can't implement method

我正在使用 Micronaut 框架,我有以下設置:有一個名為 Transaction 的實體,具有一個長 ID,以及三個字段,一個 UUID、一個字符串報告和一個字符串 State:

@Entity
public class Transaction {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;


private UUID uuid;

private String report;

private String state;
}

在 CrudRepository 中,我定義了以下查詢:

int updateByUuid(UUID uuid, String state);

這使用給定的新 State 正確更新了我的事務實體。 現在我想寫一個不同的查詢:

int updateByUuid(UUID uuid, String report):

顯然這無法構建,因為簽名是相同的。 我試圖寫以下內容:

int updateReportByUuid(UUID uuid, String report);

或者:

int updateReportByUuid(String report, UUID uuid);

(所以改變參數)這也失敗了,錯誤信息

Projections are not supported on batch updates

No possible implementations found

唯一一次沒有失敗是我將 function 更改為以下內容:

int updateReportByUuid(@Id Long id, String report);

但顯然這是不正確的(因為我指定了 ByUuid,並且作為第一個參數我給出了 Long id),也不是我想要的功能。 我想要的是讓數據庫通過它的'UUID 找到我想要更新的事務,並更新它的'報告列。

這被認為是批量更新的原因是,因為您正在更新非主鍵字段上的記錄。

如上所述,字段uuid在技術上是唯一的,您還聲明它是唯一的,但它不是主鍵。 因此,Micronaut Data 將其視為批量更新。

您至少有以下兩個選項。

  • id字段從Long轉換為UUID並刪除字段uuid 在這種情況下,您的主鍵是 UUID,您的更新方法將開始工作。
  • 通過添加@Query注釋告訴 Micronaut Data 要做什么。

暫無
暫無

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

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