实体的Morphia Mapper(适用于整个Java类/ POJO)

时间:2017-08-24 14:49:47

标签: morphia

我在使用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;
}

问题是,我需要映射整个班级而不仅仅是某些成员。 我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

Morphia不支持这样的东西。文档结构通常必须与对象结构匹配。但是,您可以使用生命周期注释来按摩用于加载和保存实体的DBObject。在此,您可以使用@PreLoad重新整形DBObject以反映Java对象所期望的位置。然后@PrePersist在写回mongo之前将这些值移回usersettings下。