Java 存储库无法实现方法

Java Repository can't implement method

我正在使用 Micronaut 框架,我有以下设置: 有一个名为 Transaction 的实体,带有一个 Long ID 和三个字段,一个 UUID,一个 String Report 和一个 String 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);

这会使用给定的新状态正确更新我的交易实体。 现在我想写一个不同的查询:

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

唯一一次构建没有失败是当我将函数更改为以下内容时:

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

但显然这是不正确的(因为我指定了 ByUuid,并且作为第一个参数我给出了一个 Long id),而且也不是我想要的功能。我想要的是让数据库通过它的 UUID 找到我想要更新的事务,并更新它的报告列。

之所以将其视为批量更新,是因为您正在更新非主键字段上的记录。

如上所述,字段 uuid 在技术上是唯一的,您也将其声明为唯一,但它不是主键。因此 Micronaut Data 将其视为批量更新。

您至少有以下两种选择。

  • id 字段从 Long 转换为 UUID 并删除字段 uuid。在这种情况下,您的主键是一个 UUID,您的更新方法将开始工作。
  • 通过添加 @Query 注释告诉 Micronaut 数据要做什么。