使用Spring Data&Couchbase时@Version字段未添加到文档中

时间:2018-10-25 11:05:27

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

我正在尝试在Couchbase中使用@Version字段创建对象。

因此,我创建了一个类似的类(关于乐观锁following this example1):

@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),但是没有任何内容保存在DB

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

我在这里想念什么?

1 个答案:

答案 0 :(得分:0)

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

我改变了

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

简单

@AllArgsConstructor

它开始正常工作。