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))