【发布时间】: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