Morphia中的@Embedded注解实际上是做什么的?

时间:2018-08-14 15:47:31

标签: java mongodb annotations morphia

使用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批注实际上是做什么的?除了简单地写入数据之外,它是否会影响查询,索引或其他存储功能的能力?

2 个答案:

答案 0 :(得分:0)

根据经验,应该@Embedded处理依赖于父对象(因此在其外部没有生命)并且在对象之间不共享的对象。

默认情况下,Morphia在Mongo中使用字段名称作为值名称。可以通过在@Embedded注释上指定一个名称来覆盖它:

    @Embedded("blog_comments")
    private List<Comment> comments;

即使没有@Embedded,只要该类实现了java.io.Serializable,您仍然可以将java类用作字段类型。但是,该字段将以二进制格式而不是如上所述的结构化数据存储在MongoDB中。

来源herehere

答案 1 :(得分:0)

Serializable通常不与Morphia一起使用。 @Embedded有点模棱两可,其原始意图似乎已经丢失。实际上,在我正在制作Morphia官方2.0的分叉中,我对其进行了限制,使其仅适用于课程级别。这告诉Morphia映射类型,但不会使对丢失的@Id注释的映射失败。在该分支中,如果您想指定字段名称以外的其他名称,则只需使用@Property即可,就像处理任何非嵌入式类型一样。

我希望至少可以澄清一下。