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

标签 java firebase google-cloud-platform google-cloud-firestore

我有两个类(class):

@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

我想要一种机制来更新完整的对象,而不仅仅是特定的值。 有人可以帮忙吗?

最佳答案

要写入整个对象,请使用ref.set(p)。这将用 p 中的数据覆盖 ref 中的任何现有数据。

无法将对象的数据子集写入某个位置。如果您需要该功能,则需要创建一个包含要更新的特定字段的Map

关于java - 无法更新 Firebase Java 中的完整子对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58284812/

相关文章:

google-cloud-platform - 谷歌 Composer 环境中的环境健康是什么意思

firebase - 如何在Firebase中自动导入Google云存储的存储桶?

java - 测试文件系统交互 : Setting file permissions

android - Firebase android分页

android - 使用 Firebase 和 Flutter 的 Multi-Tenancy SaaS 应用

postgresql - 是否可以将 firebase 云 firestore 数据导出到 postgresql?

python - Flask部署

java - onShow 事件在每个页面重新加载期间不必要地触发

java - Java 中的 "@Override"

java - Android 上的 GCM 演示客户端,错误为 "Unable to instantiate activity"