【问题标题】:@Version field is not added to document when using Spring Data & Couchbase使用 Spring Data 和 Couchbase 时,@Version 字段未添加到文档中
【发布时间】:2018-10-25 11:05:27
【问题描述】:

我正在尝试在 Couchbase 中创建一个带有 @Version 字段的对象。

所以我创建了一个这样的类(following this example 关于乐观锁定1):

@Document
@Data
@AllArgsConstructor(onConstructor = @__(@PersistenceConstructor))
@RequiredArgsConstructor
@Builder
public class CatLock{

@Id
@GeneratedValue(strategy = GenerationStrategy.UNIQUE)
private String id;

@Version
private long version;

@Field
final private String catName;
}

保存文档时没有问题:

  CatLock catLock = CatLock.builder()
                    .catName("Oscar")
                    .build();
  catLockRepository.save(catLock);

但是当使用 Couchbase UI 检查数据库中的文档时,我看到文档中没有 version 字段(也没有 id 字段):

{
  "_class": "com.example.CatLock",
  "catName": "Oscar"
}

当代码到达我们尝试读取对象的地步时:

CatLock inDB = catLockRepository.findCatLockByCatName("Oscar");

我们得到这个错误:

原因:java.lang.IllegalArgumentException:参数版本不能为空!

一开始我尝试在创建对象时添加version = 1L,但没有帮助:代码成功通过catLockRepository.save(catLock),但数据库中没有保存任何内容.

我还看到我不应该触摸/更改 version 字段。

我在这里错过了什么?

【问题讨论】:

    标签: java spring-data-jpa spring-data couchbase versioning


    【解决方案1】:

    似乎问题出在CatLock 类的注释中。

    我变了

    @AllArgsConstructor(onConstructor = @__(@PersistenceConstructor))

    简单

    @AllArgsConstructor
    

    它开始工作正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-21
      • 1970-01-01
      • 2017-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-02
      • 2019-04-21
      相关资源
      最近更新 更多