[英]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.