2

我正在将一个曾经使用 Jongo 与 MongoDB 通信的 Java 应用程序移植到 Morphia + 新的 MongoDB Java 驱动程序。

在数据库中有平面文档,例如:

{
        "_id" : ObjectId("56c2e5b9b9b6e9753d4f11de"),
        "field1" : "foo",
        "field2" : "bar",
        "field3" : NumberLong("1455613369030"),
        "field4" : NumberLong("1455613369030"),
        "field5" : NumberLong(58),
        "field6" : NumberLong(1)
}

并且没有平面实体类来将这些文档存储在 Java 应用程序中,使用 jackson 进行注释以与 Jongo 一起使用:

public class MyPOJOClass {

    public static final String COLLECTION_NAME = "foobar";

    @JsonProperty(value = "_id")
    private String id;
    @JsonUnwrapped
    private FooBar foobar;
    @JsonUnwrapped
    private MyLongs longs;

    // Constructor and other methods

    public static class FooBar {
        @JsonProperty(value = "field1")
        private String foo;
        @JsonProperty(value = "field2")
        private String bar;
        // Consteructor and other methods…
    }

    public static class MyLongs {
        @JsonProperty(value = "field3")
        private long first;
        @JsonProperty(value = "field4")
        private long second;
        // etc…
    }
}

我可以以某种方式将这个确切的结构按原样移植到 Morphia,而无需展平实体类或扩展文档(以便foobar字段在一个嵌入式文档中,而LongNumber字段在另一个文档中)?

我还没有找到任何@Embedded注释示例(唯一一个看起来相关并带来一些希望的注释)来做这样的事情。我想最终得到类似的东西:

@Entity(MyPOJOClass.COLLECTION_NAME)
public class MyPOJOClass {

    public static final String COLLECTION_NAME = "foobar";

    @Id
    private ObjectId id;
    @Embedded(_SOME_MAGIC_?)
    private FooBar foobar;
    @Embedded(_SOME_MAGIC_?)
    private MyLongs longs;

    // Constructor and other methods

    @Embedded(_SOME_MAGIC_?)
    public static class FooBar {
        @Property("field1")
        private String foo;
        @Property("field2")
        private String bar;
        // Consteructor and other methods…
    }

    @Embedded(_SOME_MAGIC_?)
    public static class MyLongs {
        @Property("field3")
        private long first;
        @Property("field4")
        private long second;
        // etc…
    }
}
4

0 回答 0