Spring Data Couchbase: автоматическое создание идентификатора

Я настраиваю документ с аннотацией @Id, и в моих тестах я получаю MappingException, потому что Id не устанавливается при создании нового документа. Spring-data + couchbase не может автоматически назначать идентификатор для новых документов?


person user2722238    schedule 01.05.2016    source источник


Ответы (5)


В Couchbase нет автоматического создания идентификаторов, поэтому вам нужно установить его.

Имейте в виду, что Couchbase может хранить разнородные данные в одном и том же Bucket, поэтому по умолчанию, если у вас есть несколько типов сущностей, они будут в одной и той же единице хранения. Поэтому, если у вас, например. User и Product сущности, создавая и сохраняя User, который @Id имеет значение "foo", тогда Product также с идентификатором "foo" в конечном итоге перезапишет User на Product.

Я имею в виду, что вы должны предоставить @Id и убедиться, что идентификаторы не совпадают, даже между классами сущностей.

person Simon Baslé    schedule 01.05.2016

На момент фиксации 069ceea spring-data-couchbase, похоже, включает поддержка автогенерирования ключей с использованием сгенерированных ключей по свойствам или уникальным UUID. См. person Mico    schedule 13.04.2017


Вот правильный ответ.

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

согласно person Ronny Shibley    schedule 14.10.2018


Кроме того, в Couchbase Java SDK есть генератор UUID, который может вам помочь.

Обсуждение UUID обсуждается здесь.

person Angelo Assis    schedule 02.05.2016
comment
да, использование атомарных счетных документов Couchbase может служить цели создания последовательности для идентификаторов. Если вы не используете один и тот же счетчик в каждом типе документа, вам все равно понадобится, например. используйте префикс, чтобы гарантировать уникальность идентификатора. - person Simon Baslé; 02.05.2016

Вы можете сгенерировать уникальный UUID с помощью Java. Это сгенерирует UUID Java. Может использоваться как уникальный в Couchbase PK.

@Document
public class BasicEntity {

@Id
@Field
private String _id;

/**
 * @return the _id
 */
public String get_id() {
    return _id;
}

/**
 */
public void set_id() {
    this._id = UUID.randomUUID().toString();
   }

}
person Pavan    schedule 05.01.2017