Morphia 中的 @Embedded 注释实际上有什么作用?

jim*_*rra 4 java annotations mongodb morphia

当写入文件Mongodb使用Morphia,这样的结构将被写入没有任何问题,并没有需要的@Embedded注释:

@Entity
public class Blog {
    @Id
    private String id;
    private List<Comment> comments;
}
Run Code Online (Sandbox Code Playgroud)

comments字段被愉快地存储为嵌套Comment元素数组(Comment是一个没有注释的普通 POJO)。

但是,Morphia文档建议我应该使用它:

@Entity
public class Blog {
    @Id
    private String id;
    @Embedded
    private List<Comment> comments;
}
Run Code Online (Sandbox Code Playgroud)

但是在我的测试中,使用@Embedded注释似乎并没有比简单地编写没有注释的结构做任何额外的事情。

那么@Embedded注解实际上是做什么的呢?除了简单地写入数据之外,它是否会影响查询、索引或其他一些存储功能的能力?

eva*_*oly 5

Serializable通常不与 Morphia 一起使用。 @Embedded有点暧昧的东西,原本的意图似乎已经迷失了。事实上,在我正在制作 Morphia 官方 2.0 的 fork 中,我已经限制它只适用于类级别。这告诉 Morphia 映射类型,但不会使映射丢失的@Id注释失败。在该分支中,如果您希望指定字段名称以外的名称,您只需@Property像对待任何非嵌入类型一样使用即可。

我希望这至少能澄清一点。


ach*_*áin 2

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

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

    @Embedded("blog_comments")
    private List<Comment> comments;
Run Code Online (Sandbox Code Playgroud)

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

来源在这里这里