我正在尝试在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)
,但是没有任何内容保存在DB 。
我还看到我不应该触摸/更改version
字段。
我在这里想念什么?
答案 0 :(得分:0)
问题似乎出在CatLock
类的注释中。
我改变了
@AllArgsConstructor(onConstructor = @__(@PersistenceConstructor))
简单
@AllArgsConstructor
它开始正常工作。