Генерация идентификатора документа Couchbase - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть приложение 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 этот документ сохраняется как

enter image description here

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

Я проверял это много раз, но результат тот же.

1 Ответ

0 голосов
/ 04 декабря 2018

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

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

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

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

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

ОБНОВЛЕНИЕ КАК РЕДАКТИРОВАНИЕ ВОПРОСА

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

Entity:

@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"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...