无法更新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)
但是,我可以通过路径/test/<ID>/address.add1
访问文档来更新add1的部分数据设置值
我需要一种机制来更新完整的对象,而不仅仅是特定的值。 有人能帮忙吗
# 1 楼答案
最后,找到了解决方案:
通过使用设置选项。mergeFields()并提供要更新的字段,我可以更新指定的字段
# 2 楼答案
要写入整个对象,请使用
ref.set(p)
。这将用p
中的数据覆盖ref
中的任何现有数据无法将对象数据的子集写入某个位置。如果需要该功能,则需要创建一个
Map
,其中包含要更新的特定字段