2016-07-08 61 views
1

我剛剛開始一個使用CouchBase 4.5和Spring Data CouchBase的新項目。我有一個看起來像這樣的實體:我如何讓Spring Data Couchbase堅持ID字段?

@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保存,蜿蜒像這樣的DB:

{ 
    "_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字段被保存到數據庫?

回答

1

春季數據Couchbase實現使用@Id場作爲Couchbase的文件密鑰。然後它會在持續期間忽略該特定字段,並且@Field不會更改該字段。

在這種特殊情況下沒有忽略@Field將反序列化邏輯複雜,因爲1個屬性的值將是2個地方......

+0

那麼我們如何將獨立文檔的引用添加到我們當前的文檔中? – talhaocakci

0

您可能會碰到一個保留字?

如果您將「key」更改爲其他任何類似「keyz」的設備,它是否有效?

我看到那個KEY是一個保留字N1QL -

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

+0

該死我真的以爲這就是答案!不幸的是,我嘗試了幾個其他字段名稱,如keyz和id,但它們都沒有出現。 – Jared

+0

你可以用後退標記轉義保留字。 – geraldss