0

假设我有一张这样的桌子

@Table(value = "myTable")
public class MyRow {
    private UUID id;    // primary key
    private String state;
}

我有一个根据存在条件更新行的查询

@Query("update myTable set state='Opened' where id=?0 if exists")
Boolean open(UUID id);

到目前为止,一切都很好,如果行存在,则查询返回 true,否则返回 false。

现在,我想更改查询以设置当前状态的条件。

@Query("update myTable set state='Opened' where id=?0 if state='Closed'")
Boolean open(UUID id);

尽管如此,它仍在工作,返回值反映了该行是否已更新。但如果它返回错误,我会错过 CQL 查询返回的关于失败条件的事实。(解释在https://docs.datastax.com/en/cql-oss/3.3/cql/cql_reference/cqlUpdate.html#cqlUpdate__conditionally-updating-columns

例子:

[applied]  | state
-----------|----------- 
     False | Opened

所以,而不是 Boolean 作为返回类型,我想要类似(或等效)的东西

class ConditionalReturn {
  Boolean applied;
  String state;
}

而是使用

@Query("update myTable set state='Opened' where id=?0 if state='Closed'")
ConditionalReturn open(UUID id);

但这不起作用……您认为可以直接使用 @Query 吗?[不使用 spring cassandra 模板]

4

1 回答 1

0

处于类似情况,March Paluch 分享说“LWT 返回值只能通过 CqlTemplate/CassandraTemplate 使用,而不是存储库。”

于 2022-02-22T20:24:11.787 回答