Отображение плоских документов БД на вложенные классы в Morphia

Я портирую Java-приложение, которое раньше использовало Jongo для связи с MongoDB, в 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, как есть, без выравнивания классов сущностей или расширения документов (чтобы foo а также bar поля находятся в одном встроенном документе и 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…
    }
}

0 ответов

Другие вопросы по тегам