Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Morphia持久化域对象而不向域对象添加不必要的注释的策略?_Java_Mongodb_Annotations_Morphia - Fatal编程技术网

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

Java 使用Morphia持久化域对象而不向域对象添加不必要的注释的策略?,java,mongodb,annotations,morphia,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

假设我有一个名为
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实例中。我已经创建了我的MorphiamMemberRepository实现,但我不确定的是如何尽可能少地存储域对象

任何Morphia用户都知道我需要创建一个类型为
ObjectId
的ID字段,并用
@ID
对其进行注释。此外,我还需要用
@Entity(“members”)
注释该类。我不一定想用Morphia/MongoDB特定的注释把我的好域对象弄得乱七八糟


那么…各位堆垛工,我应该怎么做才能使这个实现尽可能干净?

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

如果您有一个唯一的字段,那么您不需要添加任何新字段,只需使用@Id标记该字段,然后就可以使用它了


如果您真的不想这样做,您可以在morphia中手动创建元数据来处理您的类,但这将是更多的工作,因为该过程不会通过任何外部配置格式公开。

假设有IMember,所以
成员实现IMember
。Getter方法在IMember中定义

另一个类
MorphiaMember实现了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))