Генерация идентификатора документа Couchbase

У меня есть приложение Springboot, интегрированное с couchbase 6.0. Я читал, что если ключ помечен @Id, он будет сохранен как идентификатор документа и не будет частью json.

Затем я использовал @Id и @Field вместе в ключе, но все же это поле не отображается в документе json.

Может ли кто-нибудь помочь мне в следующем:

1: Как сделать тот же ключ, что и идентификатор документа, и также сохранить его частью json.

2: Если поле объявлено с @Id, оно создается как идентификатор документа и не отображается в документе, но когда я делаю запрос на получение, тот же ключ появляется в ответе.

Я тоже пробовал, нажмите здесь https://docs.spring.io/spring-data/couchbase/docs/current/reference/html/#couchbase.autokeygeneration.usingattributes.

Моя сущность:

@Id @GeneratedValue(strategy = GenerationStrategy.USE_ATTRIBUTES,delimiter="::")
private String id;
@IdAttribute
private String userid;
@Field
private String fname;
@Field
private String lname;

Тело метода публикации:

{

"id": "888",
"userid":"user1",
"fname": "xyz",
"lname": "abc"

}

На сервере Couchbase этот документ сохраняется как

введите описание изображения здесь

Он создает идентификатор документа только как 888, он должен генерировать идентификатор документа как 888 :: user1

Я тестировал это много раз, но результат был таким же.


person Bifrost    schedule 04.12.2018    source источник
comment
Привет, я обновил ответ, пожалуйста, посмотрите   -  person juanlumn    schedule 10.12.2018


Ответы (1)


Похоже, вы ищете Генерация ключей с использованием атрибутов:

Обычной практикой является создание ключей с использованием комбинации атрибутов документа. Генерация ключей с использованием атрибутов объединяет все значения атрибутов, аннотированные с помощью IdAttribute, на основе предоставленного порядка, аналогичного префиксам и суффиксам.

Так, например, вы можете:

@Document
public class User {
  @Id @GeneratedValue(strategy = USE_ATTRIBUTES)
  private String id;
  @IdAttribute
  private String userid;
  ...
}

Согласно приведенному выше примеру вы получите в результате документ с id = userId, а также поле userId в json.

ОБНОВЛЕНИЕ КАК ВОПРОС ИЗМЕНИТЬ

Возможно, вам придется включить новое поле в свою сущность, скажем postId, и изменить имя поля id в теле метода публикации на postId, примерно так:

Сущность:

@Id @GeneratedValue(strategy = GenerationStrategy.USE_ATTRIBUTES,delimiter="::")
private String id;
@IdAttribute(order = 0)
private String postId;
@IdAttribute(order = 1)
private String userid;
@Field
private String fname;
@Field
private String lname;

Тело метода публикации:

{
"postId": "888",
"userid":"user1",
"fname": "xyz",
"lname": "abc"
}
person juanlumn    schedule 04.12.2018
comment
@julumn, не могли бы вы проверить мой отредактированный пост выше. Я тестировал ваше решение, но оно не сработало. - person Bifrost; 05.12.2018
comment
@lokendralovely, пожалуйста, взгляните на обновленный ответ - person juanlumn; 10.12.2018