我不确定我是否以正确的方式使用@Id。 现在我使用eMail-Address作为@Id字段。电子邮件字段仅在服务器端设置(OAuthService.getCurrentUser.getEmail)
第一个问题:这是个好主意吗?
如果我创建一个具有RegistrationTO的Item-class,因为它的父级是有意义的,使用电子邮件地址作为我的Item-class中的@Id字段,或者Item-class是否拥有它自己生成的,自动生成的,id和Key父级指定关系?
Objectify-Tutorial建议避免@Parent - 所以,在这里我认为它也没有必要。 我是对的?
这是我的RegistrationTO:
public class RegistrationTO implements Serializable {
private static final long serialVersionUID = 1L;
@NotNull
@Size(min = 5, max = 20)
private String firstname;
@NotNull
@Size(min = 5, max = 20)
private String name;
@NotNull
@Size(min = 5, max = 20)
private String country;
@Id
@NotNull
@Size(min = 5, max = 20)
@Pattern(regexp = "\b[A-Z0-9._%-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}\b")
private String email;
public RegistrationTO() {
}
public RegistrationTO(final String firstname, final String name, final String company) {
this.firstname = firstname;
this.name = name;
this.country = country;
email = "will be set on server (Oauth)";
}
public String getFirstname() {
return firstname;
}
public String getName() {
return name;
}
public String getCountry() {
return country;
}
public String getEmail() {
return email;
}
public void setEmail(final String email) {
this.email = email;
}
}
Item类的示例:
public class Item implements Serializable {
private static final long serialVersionUID = 1L;
@Id
Long id
//or
//@Id
//String email
Key<RegistrationTO> parent;
String itemno;
}
提前谢谢!
答案 0 :(得分:1)
关于你的问题,如果使用电子邮件作为@Id是否正确,因为电子邮件将唯一地标识班级的每个对象,那么你没事!
现在,关于Item类的@Id,如果电子邮件唯一标识每个对象,则无需创建新的自动生成的Long作为@Id。通常,选择@Id的标准是唯一地标识该类的所有对象。
对于RegistrationTO和Item类之间的关系,仅当您需要将这些实体作为同一实体组时,才使用@Parent注释。代码:
@Parent
Key<RegistrationTO> parent;
否则,使用“普通”关系(如您在示例中所示),允许RegistrationTO和Item实体存储在GAE数据存储区中的不同实体组中。有关实体组的更多信息,请查看: http://code.google.com/appengine/docs/java/datastore/entities.html#Entity_Groups_and_Ancestor_Paths
希望有所帮助!