2017-01-02 3 views
1

私はMorphiaを新しくして、オブジェクトの既存の埋め込みarrayListを更新しようとしています。ここに私のクラスには、次のとおりです。モルフィアに埋め込みオブジェクトリストを更新するには?

上記のクラスのための
@Entity 
public class Student { 
    @Embedded private List<Address> address; 
    private String name; 
    private Long id; 
    ... getter and setter .. methods 
} 

@Embedded 
public class Address { 
    private Long customId; 
    private String name; 
    ... getter and setter .. methods 
} 

Json

{ 
"student":{ 
    "address": [{ 
     "customId": "123456", 
     "name": "Jack" 
    }, { 
     "customId": "78901", 
     "name": "sam" 
    }], 
    "name": "Teacher", 
    "id" : 1234567890 
} 

私はaddress.customId78901あるaddress.nameを更新する必要があります。 Morphiaのドキュメントに従ってみましたが、何も見つかりませんでした。

最初に要素を削除して、78901address.customIdとし、データを既存のリストに追加すると考えました。上記のコード

UpdateOperations<Student> ops; 
     Query<Student> updateQuery = datastore.createQuery(Student.class).filter("id", 1234567890); 
     ops = datastore.createUpdateOperations(Student.class).disableValidation().removeAll("address", new BasicDBObject("customId", 78901)); 

成功し期待したデータを削除していますが、私は、既存のリストにデータを追加するかどうかはわからない:データを除去するために、私はこれがしました。どんな助けにも感謝します。ありがとう

+0

Javaリストを直接操作してエンティティをデータベースに保存しないのはなぜですか? – c4k

答えて

0

このようなものを試すことができます。

更新するアドレス埋め込み文書を探します。

Query<Student> searchQuery = datastore.createQuery(Student.class).field("id").equal(1234567890).field("address.customId").equal(78901); 

$位置演算子を使用して、見つかった埋め込みドキュメントを参照し、$を設定して値を更新します。

UpdateOperations<Student> updateQuery = datastore.createUpdateOperations(Student.class).disableValidation().set("address.$.name", "othername"); 
datastore.update(searchQuery, updateQuery); 
関連する問題