我正在将一个曾经使用 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,而无需展平实体类或扩展文档(以便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…
}
}