java - 无法在 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
我想要一种机制来更新完整的对象,而不仅仅是特定的值。有人可以帮忙吗?
解决方案
要编写整个对象,请使用ref.set(p)
. ref
这将使用 中的数据覆盖任何现有数据p
。
无法将对象的数据子集写入某个位置。如果您需要该功能,则需要Map
使用要更新的特定字段创建一个。
推荐阅读
- ios - 可选闭包总是逃逸吗?我们应该在上面使用[weak self]还是[unowned self]?
- pandas - 如何根据索引条件删除 Pandas 行(真/假)
- bootstrap-4 - Bootstrap Accordian Plus 和 Minus 符号错误
- python - 如何使用 GTK - UI 为 python 脚本设置“任务”或“应用程序”名称?
- python - 如何在 Python Selenium 中禁用 SSL 检查以访问麦克风?
- vb.net - 将选定的数据从树视图传递到 vb.net 中的文本框
- ruby-on-rails - 请求规范中带有设计的 Rspec
- ios - 动画向左展开
- visual-studio - 在 Visual Studio 中更改默认项目创建位置
- c++ - 如何从 std::string 中删除 +