Поле @Version не добавляется в документ при использовании Spring Data & Couchbase - PullRequest
0 голосов
/ 25 октября 2018

Я пытаюсь создать объект в 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.

Что мне здесь не хватает?

1 Ответ

0 голосов
/ 25 октября 2018

Похоже, проблема была в аннотациях класса CatLock.

Я изменил

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

на просто

@AllArgsConstructor

И все заработало.

...