2017-01-02 31 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);