- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有下一个问题:在项目开始时,我只有某个类的一个实现:
class Wrapper {
private Child child;
}
class Child { ... }
当 mongodb 序列化这个类时,它从不为 child
对象设置 _class
属性。现在我需要制作下一个类结构:
class Wrapper {
private Child child;
}
abstract class Child { ... }
class ChildA extends Child { ... }
class ChildB extends Child { ... }
很明显,然后我尝试反序列化旧文档,它会抛出异常,因为它无法实例化抽象类。
问题是:是否有任何方法可以指定对象反序列化的默认实现?例如,如果 _class
属性不存在,如 this,我想将 child
字段反序列化到 Child1
类中Jackson 库中的参数?
最佳答案
这可能不是最佳解决方案,因为我怀疑有办法控制 mongo 反序列化。然而,如果你想避免挖掘那口井,你可以使用 Mongo lifecycle events 中的一个。 .特别是,onAfterLoad 是在从数据库中读取文档之后但在将其转换为 java 对象之前调度的。
因此,使用该事件,您可以检查传入的 json,甚至可以在它转换之前更改它...这是您的情况的示例:
@Component
public class WrapperRepositoryListener extends AbstractMongoEventListener<Wrapper> {
@Override
public void onAfterLoad(AfterLoadEvent<Wrapper> event) {
Document doc = event.getDocument();
Document child = (Document)doc.get("child");
if (!child.containsKey("_class")) {
child.put("_class", "ChildA");
}
}
}
或者,(虽然我知道这不是你问的问题),根据你有多少数据,你可以编写一个 mongodb 脚本,简单地更新所有现有记录以具有 _class 字段:
db.wrappers.update(
{
"child" : { $exists : true},
"child._class" : { $exists : false }
},
{
$set:{
"child._class" : "ChildA"
}
},
{
multi: true,
upsert: false
}
)
关于mongodb - spring-data-mongodb 中没有 "_class"属性的对象的默认实现映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64878319/
我们正在使用 spring data mongo 存储库来存储/检索文档。以下是我们得到的类的 Java 结构:抽象类 A -> 具体类 B 和 C我们正在使用 save() 方法编写文档。保存文档时
我正在使用 MaterialUI,更具体地说是 TextField 组件,我想以某种方式对其进行装饰以在组件级别处理验证状态。 我知道 React 中的 HOC,这是一种似乎非常适合这个的模式。但是我
默认的MappingMongoConverter 为数据库中的每个对象添加一个自定义类型键(“_class”)。所以,如果我创建一个人: package my.dto; public class Pe
我在使用 Spring Data MongoDB 项目时遇到问题。我的问题是所有集合记录中的 _class 属性。我的用户集合大小接近 130 万条记录。所有记录都有一个 _class 属性。这是项目
我一直在阅读 MongoDB documentation和 Spring默认情况下向存储的数据添加一个 _class 字段。有什么方法可以使用此信息进行类型推断? 例如:有一个抽象类Animal,它有
我有下一个问题:在项目开始时,我只有某个类的一个实现: class Wrapper { private Child child; } class Child { ... } 当 mongodb
我已经在 google colab 上训练了一个模型,并希望将它加载到我的本地机器上。但我得到 ModuleNotFoundError: No module named 'sklearn.svm._c
当将数据插入 MongoDB Spring Data 时添加自定义“_class”列,在使用 Spring Boot & MongoDB 时有没有办法消除“class”列? 还是我需要创建自定义类型映
我是 spring-aerospike-data 的新手,我希望有人能告诉我如何在发送时删除 @user_key 和 @_class 垃圾箱向应用程序发布请求。我正在尝试在我的 Rest-api 中使
当尝试实例化 MyClass() 时,我收到以下错误。 s = new MyClass(); > TypeError: 'undefined' is not a function (evaluatin
我在 Win 7 64 机器上将 CodeBlocks 与 gcc 4.7.2 和 gmp 5.0.5 结合使用。开始使用 gmpxx 后,我看到一个奇怪的段错误,它不会出现在 +、- 等运算符中,但
我可以扩展/覆盖 Spring Data 中的哪些类以使 where-clause 包含继承基本实体/模型的类? 详细说明.... 下面是一些从“基本”Activity 类扩展而来的模型: @Docu
我正在为我的应用程序使用 spring-data-elasticsearch。我发现 spring 会在我的所有文档中自动创建动态字段“_class”。我将索引配置为严格的动态映射。我期待一些属性从我
我是一名优秀的程序员,十分优秀!