使用Morphia持久保存域对象而不向域对象添加不必要的注释的策略?

时间:2011-03-28 20:59:03

标签: java mongodb annotations morphia

假设我可以说我有一个名为Person的域对象。它看起来像这样:

public class Member {

    private final String firstName;
    private final String lastName;
    private final String email;
    private final String password;

    public Member(String firstName, String lastName, String email, String password) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.email = email;
        this.password = password;
    }

    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public String getEmail() {
        return email;
    }

    public String getPassword() {
        return password;
    }
}

我还有一个MemberRepository接口,用于定义基本的CRUD和其他一些含糖的方法。

现在假设我想使用Morphia在MongoDB实例中保留此域对象。我已经创建了我的MorphiaMemberRepository实现,但我不确定的是如何尽可能少地存储域对象。

任何Morphia用户都知道我需要创建ObjectId类型的ID字段并使用@Id对其进行注释。另外,我需要使用@Entity("members")注释该类。我不一定想用Morphia / MongoDB特定的注释来混淆我的好域名对象。

所以...堆叠器,我应该怎样做才能使这个实现尽可能干净?

2 个答案:

答案 0 :(得分:1)

这是Morphia的要求(至少是@Id)。注释不需要更改使用对象或序列化的方式。它们只是大多数程序忽略的额外元数据;它们是无害的。

如果您有一个唯一字段,那么您不需要添加任何新字段,只需使用@Id标记并完成它。

如果您真的不想这样做,可以在morphia中手动创建元数据来处理您的类,但由于该过程不通过任何外部配置格式公开,因此这将更加有效。 / p>

答案 1 :(得分:0)

假设有IMember Member implements IMember。 Getter方法在IMember中定义。

另一个类MorphiaMember implements IMember根据需要进行注释并具有ID字段(id不总是ObjectId)。 每个类都有一个工厂方法

public static Member from(IMember mi) { ... }

如此典型的工作流程将是:

MemberRepository repo = ...
Member m = Member.from(repo.get(some_id))
...
Member m2 = ...
repo.save(MorphiaMember.from(m))