无法在Firebase Java中更新完整的子对象

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法在Firebase Java中更新完整的子对象相关的知识,希望对你有一定的参考价值。

我有两个课程

@Data
public static class Person 
    private String id;
    private String value;
    private Address address;



@Data
public static class Address 
    private String add1;
    private String add2;


@Test
void name2() throws ExecutionException, InterruptedException 

    final Person p = new Person();
    p.setId("2FEpIFGqH7izWJ1ydfaKtg");
    p.setValue("some-value");

    final Address address = new Address();
    address.setAdd1("Add 1");
    address.setAdd2("Add 2");
    p.setAddress(address);

    final Map<String, Object> params = new HashMap<>();
    params.put("address", address);

    firestore.collection("test").document("2FEpIFGqH7izWJ1ydfaKtg").update(params).get();

    // firestore.collection("test").document("2FEpIFGqH7izWJ1ydfaKtg").set(params, SetOptions.merge()).get(); This also doesn't works, I get same error.

我在运行此代码时得到以下错误


com.google.cloud.firestore.FirestoreException: Cannot convert CustomerRepositoryTest.Address(add1=Add 1, add2=Add 2) to Firestore Value
at com.google.cloud.firestore.FirestoreException.invalidState(FirestoreException.java:51)
    at com.google.cloud.firestore.UserDataConverter.encodeValue(UserDataConverter.java:178)
    at com.google.cloud.firestore.DocumentSnapshot.fromObject(DocumentSnapshot.java:89)
    at com.google.cloud.firestore.UpdateBuilder.performUpdate(UpdateBuilder.java:513)
    at com.google.cloud.firestore.UpdateBuilder.update(UpdateBuilder.java:347)
    at com.google.cloud.firestore.DocumentReference.update(DocumentReference.java:231)

但是,我可以通过按以下路径到达文档来更新add1的部分数据设置值:/test/<ID>/address.add1

我希望有一种机制来[[更新完整的对象]],而不仅仅是特定的值。谁能帮忙吗?

我有两个类:@Data public static class Person private String id;私有字符串值;私人地址; @Data public static class Address private String add1; ...
答案
要写入整个对象,请使用ref.set(p)。这将用ref中的数据覆盖p中的所有现有数据。
另一答案
最后,找出解决方案:

以上是关于无法在Firebase Java中更新完整的子对象的主要内容,如果未能解决你的问题,请参考以下文章

使用 Swift 更新 Firebase 中的子值

从 Firebase 查询具有在 ArrayList 中找到的子值的对象

如何在 Firebase 中附加到带有其他对象的路径?

Swift Firebase:无法在 fileURL 中存储 _SwiftValue 类型的对象

“无法转换类型的值” - Firebase Swift 中的错误

从 Firebase 仅检索当前用户的子值