我有两个类(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/