Отображение плоских документов БД на вложенные классы в 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…
}
}