为什么 Spring 数据不支持返回修改查询的实体?

Why Spring Data doesn't support returning entity for modifying queries?

在实现创建需要某些工作人员解决的任务的系统时,我的想法是创建一个 table,其中包含一些任务定义和状态,例如对于文档审阅,我们会有类似 reviewId, documentId, reviewerId, reviewTime 的内容。 将文档上传到系统后,我们只需将 documentId 与生成的 reviewId 一起存储,并将 reviewerIdreviewTime 留空。当下一个审稿人出现并开始审稿时,我们只需设置他的 id 和当前时间以将作业标记为 "in progress"(我故意跳过审稿人花费很长时间或在审稿过程中死亡的情况)。

例如在实现这样的用例时PostgreSQL 我们可以使用 UPDATE review SET reviewerId = :reviewerId, reviewTime: reviewTime WHERE reviewId = (SELECT reviewId from review WHERE reviewId is null AND reviewTime is null FOR UPDATE SKIP LOCKED LIMIT 1) RETURNING reviewId, documentId, reviewerId, reviewTime(所以基本上是更新第一个未使用的行,使用 SKIP LOCKED 跳过任何已经在处理的行)。

但是当从本机解决方案转向 JDBC 及以后时,我在实施时遇到了麻烦:

我错过了什么吗?是否可以全部拥有,还是我们必须满足于多个查询或存储过程?

Why Spring Data doesn't support returning entity for modifying queries?

因为这似乎是一件很特别的事情,而且 Spring 数据 JDBC 试图专注于基本内容。

Is it possible to have it all or do we have to settle for multiple queries or stored procedures?

当然可以做到这一点。 您可以使用注入的 JdbcTemplate 实现自定义方法。