实体的 Morphia 映射器(对于整个 Java class / POJO)
Morphia Mapper for entity (for whole Java class / POJO)
我在使用带有自定义 Mapper/Type 转换器的 Morphia 时遇到问题
给定以下POJO
@Entity("users")
public class User{
private String username = null;
private String password = null;
}
问题是,在给定的 MongoDB(不在我的控制之下)中,值 而不是 只是像
{
"email": "xy@test.com",
"password": "abc"
}
但对象看起来更像
{
"usersettings": {
"email": "xy@test.com",
"password": [
"abc", "cde", "efg"
]
}
}
(真实世界 Mongo 文档比您预期的要复杂得多)
所以我必须将 "usersettings.email" 映射到我的 "username" 成员,并将 "usersettings.password.0"(仅限第一个数组)映射到我的 "password" 成员。
我知道 Morphia 中有 TypeConverter,您可以注册它们,但它们仅适用于会员,不适用于 classes。
换句话说,这是行不通的(只是在运行时被忽略):
@Entity("users")
@Converters("MyUserConverter.class") <-- this does NOT WORK!
public class User{
private String email = null;
private String password = null;
}
它适用于这样的会员:
@Entity("users")
public class User{
private String email = null;
@Converters("MyCustomTypeConverter.class") <-- this would work, but does not help in my case!
private MyCustomType password = null;
}
问题是,我需要映射整个 class 而不仅仅是某些成员。
我该怎么做?
Morphia 不支持类似的东西。文档结构通常必须与对象结构相匹配。但是,您可以使用生命周期注释来处理用于加载和保存实体的 DBObject
。在此您可以使用 @PreLoad
重塑进入的 DBObject
以反映您的 Java 对象预期的位置。然后 @PrePersist
将这些值移回 usersettings
下,然后写回 mongo.
我在使用带有自定义 Mapper/Type 转换器的 Morphia 时遇到问题
给定以下POJO
@Entity("users")
public class User{
private String username = null;
private String password = null;
}
问题是,在给定的 MongoDB(不在我的控制之下)中,值 而不是 只是像
{
"email": "xy@test.com",
"password": "abc"
}
但对象看起来更像
{
"usersettings": {
"email": "xy@test.com",
"password": [
"abc", "cde", "efg"
]
}
}
(真实世界 Mongo 文档比您预期的要复杂得多)
所以我必须将 "usersettings.email" 映射到我的 "username" 成员,并将 "usersettings.password.0"(仅限第一个数组)映射到我的 "password" 成员。
我知道 Morphia 中有 TypeConverter,您可以注册它们,但它们仅适用于会员,不适用于 classes。
换句话说,这是行不通的(只是在运行时被忽略):
@Entity("users")
@Converters("MyUserConverter.class") <-- this does NOT WORK!
public class User{
private String email = null;
private String password = null;
}
它适用于这样的会员:
@Entity("users")
public class User{
private String email = null;
@Converters("MyCustomTypeConverter.class") <-- this would work, but does not help in my case!
private MyCustomType password = null;
}
问题是,我需要映射整个 class 而不仅仅是某些成员。 我该怎么做?
Morphia 不支持类似的东西。文档结构通常必须与对象结构相匹配。但是,您可以使用生命周期注释来处理用于加载和保存实体的 DBObject
。在此您可以使用 @PreLoad
重塑进入的 DBObject
以反映您的 Java 对象预期的位置。然后 @PrePersist
将这些值移回 usersettings
下,然后写回 mongo.