Java 如何使用Spring数据映射通用集合(MongoDB)?
我在映射内部集合时遇到一些问题。 项目可以有不同的内容类型。这是我的项目类:Java 如何使用Spring数据映射通用集合(MongoDB)?,java,collections,mongodb,spring-data,Java,Collections,Mongodb,Spring Data,我在映射内部集合时遇到一些问题。 项目可以有不同的内容类型。这是我的项目类: @Document(collection = "items") public class Item{ @Id private ObjectId id; private List<? super Content> content; ... } 在内容集合中使用一个图像和两个YoutubeVideo类保存(保存完成时没有问题)项后,我得到了这个JSON { "_id" : { "$oid" : "4e4
@Document(collection = "items")
public class Item{
@Id
private ObjectId id;
private List<? super Content> content;
...
}
在内容集合中使用一个图像和两个YoutubeVideo类保存(保存完成时没有问题)项后,我得到了这个JSON
{ "_id" : { "$oid" : "4e423dcf7f3a0d12265da46c"}
"content" : [
{ "location" : "hdd path"} , { "url" : "url path"} , { "url" : "url path"}
]}
这不是我期望看到的JSON。可以理解为什么无法加载和反序列化此文档
java.lang.RuntimeException: Can not map ? super trngl.mongo.domain.content.Content
你将如何映射这种对象?我不想手动序列化和反序列化对象。可能吗
发现兴趣转换器类:Code
List使用List
应该足够了,因为您无论如何都无法从混合内容列表访问具体类型。(顺便说一句,super在这里肯定是错误的,因为您没有存储内容的superties
,而是子类型。另一方面,Extends不会增加任何附加值)
List
应该与MongoTemplate
的最新快照配合使用,因为我们修复了自上一个里程碑版本以来的许多错误。如果您正在使用我们的存储库抽象,请确保Content
是一个包含id属性的抽象类。有一个开放的平台,您可能希望看到我们也支持作为存储库管理类型的接口。仅供参考(因为我们在试图弄清楚为什么要将对象作为成员的LinkedHashMaps
返回后,找了一个早上好),这个问题也发生了(在1.0.2.RELEASE中),当您尝试将集合
存储在以下表单中时:
@Document(collection = "items")
public class Item{
@Id
private ObjectId id;
private Collection<Content> content;
...
}
@文档(collection=“items”)
公共类项目{
@身份证
私有ObjectId;
私人收藏内容;
...
}
如上所述,解决方案是将其切换到列表
嗨,谢尔盖。不,你错了。保存后的JSON是相同的。问题不在java类中,而是在序列化程序/反序列化程序中。保存的JSON没有任何真实的类id,这就是为什么不可能反序列化JSON.Hi Oliver。非常感谢。你说得对。随着1.0.0.M3 everithig像我预期的那样工作,我看到了额外的'u class'属性。但是现在我所有的类都有了这个属性。仅此集合中存储的对象需要此属性。你能帮我吗?在某些类中是否可能有此属性?是否知道M4会改变此属性?它似乎不再像这里描述的那样工作了。集合是否需要任何注释?
@Document(collection = "items")
public class Item{
@Id
private ObjectId id;
private Collection<Content> content;
...
}