我在使用Morphia和自定义Mapper / Type转换器时出现问题
给出以下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"到我的"用户名"会员和" usersettings.password.0" (仅限第一个数组)到我的密码"构件。
我知道Morphia中有TypeConverters,您可以注册它们,但它们只适用于成员,而不适用于类。
换句话说,这不起作用(在运行时只是被忽略):
@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;
}
问题是,我需要映射整个班级而不仅仅是某些成员。 我怎么能这样做?
答案 0 :(得分:0)
Morphia不支持这样的东西。文档结构通常必须与对象结构匹配。但是,您可以使用生命周期注释来按摩用于加载和保存实体的DBObject
。在此,您可以使用@PreLoad
重新整形DBObject
以反映Java对象所期望的位置。然后@PrePersist
在写回mongo之前将这些值移回usersettings
下。