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 数据要做什么。
我正在使用 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 数据要做什么。