Spring Data Couchbase对象ID

时间:2017-03-19 22:48:24

标签: java spring-boot couchbase spring-data-couchbase

我正在尝试创建一个@Id属性与String不同的文档,一切都很好。我的问题是文档存储在 Bucket 中的方式,不幸的是它的前缀是类名:

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

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

有没有办法存储ID,就好像它是一个简单的String? 这是为了避免普通查询中的问题(简单查询会强迫我使用 ActorKey(key = xxxxxxxxxxx)

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> {
}

1 个答案:

答案 0 :(得分:1)

底层Couchbase SDK使用String作为文档标识符,因此spring-data-couchbase将在您的密钥对象上调用toString()。您看到的是Lombok-generated toString()方法(属于@Data注释的一代)的结果。

只需明确覆盖toString()中的ActorKey