2016-07-08 8 views
1

私はCouchBase 4.5とSpring Data CouchBaseを使用して新しいプロジェクトを開始しました。私はCouchbaseのCrudRepositoryを使用して、それを保存すると、それはDBに、このように巻き上げ、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; 
    } 
} 

{ 
    "_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に永続化されるようにする方法はありますか?

答えて

1

春データCouchbaseの実装はCouchbaseの中に文書キーとして@Idフィールドを使用しています。次に、永続性の間、その特定のフィールドを無視し、@Fieldはそれを変更しません。 1つの属性の値が2ヶ所になりますので、

は、私は本当にこれが答えだと思った...

+0

独立文書の参照を現在の文書にどのように追加しますか? – talhaocakci

0

予約語句を打っている可能性がありますか?

"key"を "keyz"のように変更すると機能しますか?

私はKEYがN1QLの予約語であることがわかります -

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

+0

ダーン、逆シリアル化のロジックが複雑になるこの特定のケースで@Fieldを無視していません!残念ながら、私はkeyzやidのようないくつかのフィールド名を試しましたが、どちらも現れません。 – Jared

+0

予約語をバックティックでエスケープできます。 – geraldss

関連する問題