Я пытаюсь создать объект в Couchbase с полем @Version
.
Поэтому я создал такой класс (, следуя этому примеру об Оптимистической блокировке 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 я вижу, что естьнет поля version
в документе (а также в нем нет поля id
):
{
"_class": "com.example.CatLock",
"catName": "Oscar"
}
И когда код достигает точки, где мы пытаемся прочитать объект:
CatLock inDB = catLockRepository.findCatLockByCatName("Oscar");
Мы получаем эту ошибку:
Вызывается: java.lang.IllegalArgumentException: версия параметра не должна быть нулевой!
Я пытался в одной точкедобавить version = 1L
при создании объекта в первую очередь, но это не помогло: код успешно прошел catLockRepository.save(catLock)
, но ничего не сохраняется в БД .
Iтакже увидел, что я не должен касаться / изменять поле version
.
Что мне здесь не хватает?