2017-01-02 83 views
1

我是Morphia的新手,嘗試更新對象的現有嵌入式arrayList。這裏是我的課:如何更新morphia中的嵌入對象列表?

@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.name其中address.customId78901。我試圖按照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); 

使用$位置運算符來引用找到的嵌入式文檔,使用$ set來更新該值。

UpdateOperations<Student> updateQuery = datastore.createUpdateOperations(Student.class).disableValidation().set("address.$.name", "othername"); 
datastore.update(searchQuery, updateQuery);