【问题标题】:Spring Data Couchbase Object idSpring Data Couchbase 对象 id
【发布时间】:2017-03-19 22:48:24
【问题描述】:

我正在尝试使用不同于String@Id 属性创建一个文档,一切正常。我的问题是文档存储在 Bucket 中的方式,不幸的是它以 Class name 为前缀:

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

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

有没有办法像简单的String 一样存储 id? 这是为了避免在普通查询中出现问题(简单查询将迫使我使用 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> {
}

【问题讨论】:

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


    【解决方案1】:

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

    只需在ActorKey 中显式覆盖toString()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-16
      • 2016-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-30
      相关资源
      最近更新 更多