使用Mongodb
将文档写入Morphia
时,这样的结构将毫无问题地编写,并且无需就需要使用@Embedded
批注:>
@Entity
public class Blog {
@Id
private String id;
private List<Comment> comments;
}
comments
字段愉快地存储为嵌套的Comment
元素的数组(Comment
是没有注释的普通POJO)。
但是,Morphia
文档建议我应该使用此文件:
@Entity
public class Blog {
@Id
private String id;
@Embedded
private List<Comment> comments;
}
但是在我的测试中,使用@Embedded
注释似乎并没有做任何额外的事情,而只是简单地编写了没有注释的结构。
那么@Embedded
批注实际上是做什么的?除了简单地写入数据之外,它是否会影响查询,索引或其他存储功能的能力?
答案 0 :(得分:0)
根据经验,应该@Embedded
处理依赖于父对象(因此在其外部没有生命)并且在对象之间不共享的对象。
默认情况下,Morphia在Mongo中使用字段名称作为值名称。可以通过在@Embedded注释上指定一个名称来覆盖它:
@Embedded("blog_comments")
private List<Comment> comments;
即使没有@Embedded
,只要该类实现了java.io.Serializable
,您仍然可以将java类用作字段类型。但是,该字段将以二进制格式而不是如上所述的结构化数据存储在MongoDB中。
答案 1 :(得分:0)
Serializable
通常不与Morphia一起使用。 @Embedded
有点模棱两可,其原始意图似乎已经丢失。实际上,在我正在制作Morphia官方2.0的分叉中,我对其进行了限制,使其仅适用于课程级别。这告诉Morphia映射类型,但不会使对丢失的@Id
注释的映射失败。在该分支中,如果您想指定字段名称以外的其他名称,则只需使用@Property
即可,就像处理任何非嵌入式类型一样。
我希望至少可以澄清一下。