Идентификатор объекта Spring Data Couchbase

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

ActorKey(key=d7471027-4bd1-40a3-8e29-5249f45beed4)

{
  "name": "Emma Watson",
  "_class": "com.guilherme.miguel.domain.Actor"
}

Есть ли способ сохранить идентификатор, как если бы это был простой String? Это делается для того, чтобы избежать проблем с простыми запросами (простые запросы заставят меня использовать ActorKey(key=xxxxxxxxxxxx))

Actor.java:

@Data
@AllArgsConstructor
@NoArgsConstructor
@Document
public class Actor {

  @Id
  private ActorKey key;
  private String name;

}

ActorKey.java:

@Data
@AllArgsConstructor
@NoArgsConstructor
public class ActorKey implements Serializable {

  private String key;

}

ActorRepository.java

@N1qlPrimaryIndexed
@ViewIndexed(designDoc = "actor")
public interface ActorRepository extends CouchbaseRepository<Actor, ActorKey> {
}

person Miguel Guilherme    schedule 19.03.2017    source источник


Ответы (1)


Базовый пакет Couchbase SDK использует String в качестве идентификатора документа, поэтому spring-data-couchbase будет вызывать toString() для ваших ключевых объектов. То, что вы видите, является результатом метода сгенерированного Lombok toString() (генерация, которая является частью аннотацию @Data).

Просто явно переопределите toString() в ActorKey!

person Simon Baslé    schedule 21.03.2017