【发布时间】:2012-08-27 11:59:18
【问题描述】:
在我们的一个项目中,我们使用 java webapp 与 MongoDB 实例对话。在数据库中,我们使用DBRefs 来跟踪一些对象关系。我们使用 jackson(使用 mongodb-jackson-mapper)对 POJO 对象进行(反)序列化。
但是,我们使用相同的 POJO 来(反)序列化到外部世界,我们的前端处理呈现 JSON。
现在,我们需要一种方法让外部世界的序列化包含来自 DBRef 的引用对象(以便 UI 可以呈现完整的对象),而我们显然希望将 DBRef 写入数据库,而不是整个对象。
现在我写了一些未经测试的静态嵌套类代码:
public static class FooReference {
public DBRef<Foo> foo;
// FIXME how to ensure that this doesn't go into the database?
public Foo getFoo() {
return foo.fetch();
}
}
理想情况下,我想要一种对此进行注释的方法,以便我可以(反)序列化它,无论是否有 getFoo() 结果,可能取决于某些配置对象。这可能吗?你有没有更好的方法来做这件事?
【问题讨论】:
-
我该怎么做以及如何解决这个问题?这是我的代码,所以我可以做任何事情,但您的评论不清楚,Google 也没有提供帮助,抱歉。
-
"transient" 是一个 java 关键字,表示不应序列化/持久化字段 - java-samples.com/showtutorial.php?tutorialid=331
-
呃,这是一个字段修饰符。这是一种方法。
-
mongodb 是否有方法的 Transient 或 NonPersistant 注解?
-
Mongo 本身有驱动程序(处理普通的类似地图的对象),这些驱动程序已经以各种不同的方式扩展/替换/包装以提供 POJO 支持。事实证明,Morphia 有一个 Transient 和一个 NotStored 注释,但我使用的是 mongo-jackson-mapper。更多的谷歌搜索表明 Jackson 支持用于序列化的视图,而 mongo-jackson-mapper 允许您指定要使用的视图,所以这似乎可行。谢谢指点!
标签: java mongodb jackson pojo mongo-jackson-mapper