如何使Spring Data Couchbase保持id字段?

时间:2016-07-08 14:08:34

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

我刚刚开始使用CouchBase 4.5和Spring Data CouchBase开发一个新项目。我有一个看起来像这样的实体:

@Document
public class ItemType implements Serializable {
    private static final long serialVersionUID = -874553420214538944L;

    @Id
    @Field
    private String key;

    @Field
    private String displayName;

    @Field
    private int appAccountId;

    @Field
    private Map<String, FieldType> fieldTypes;

    public String getKey() {
        return key;
    }

    public void setKey(String key) {
        this.key = key;
    }

    public String getDisplayName() {
        return displayName;
    }

    public void setDisplayName(String displayName) {
        this.displayName = displayName;
    }

    public int getAppAccountId() {
        return appAccountId;
    }

    public void setAppAccountId(int appAccountId) {
        this.appAccountId = appAccountId;
    }

    public Map<String, FieldType> getFieldTypes() {
        return fieldTypes;
    }

    public void setFieldTypes(Map<String, FieldType> fieldTypes) {
        this.fieldTypes = fieldTypes;
    }
}

当我使用CouchBase CrudRepository保存它时,它会在数据库中像这样结束:

{
  "_class": "com.mycompany.models.ItemType",
  "appAccountId": 2,
  "displayName": "Image - External",
  "fieldTypes": {
    "location": {
      "rank": 1,
      "type": "String",
      "publishCascade": false,
      "displayName": "Location",
      "displayAttributes": {
        "uiDisplayType": "TEXT_FIELD"
      }
    }
  }
}

除了“密钥”字段未在文档中保留外,一切似乎都很好。无论有没有@Field注释我都尝试过,但结果是一样的。有什么方法可以确保@Id字段持久保存到DB?

2 个答案:

答案 0 :(得分:1)

Spring Data Couchbase实现使用@Id字段作为Couchbase中的文档密钥。然后它会在持久性期间忽略该特定字段,而@Field不会更改该字段。

在这种特殊情况下不忽略@Field会使反序列化逻辑复杂化,因为1属性的值将在2个位置......

答案 1 :(得分:-1)

你可能会打一个保留字?

如果您更改&#34;键&#34;其他任何像&#34; keyz&#34;它有用吗?

我确实看到KEY是N1QL中的保留字 -

http://developer.couchbase.com/documentation/server/current/n1ql/n1ql-language-reference/reservedwords.html